代码之家  ›  专栏  ›  技术社区  ›  samuraiseoul

拉拉威尔4:关系似乎不会不止一次奏效

  •  0
  • samuraiseoul  · 技术社区  · 13 年前

    我有一个用户模型,它与状态模型有一对多的关系。在我的代码中,当我第一次调用 User::find()->status; 一切都很好,但后来当我找到所有用户的朋友并查找他们的状态时,它会给我空数组,尽管我知道状态在那里。我对人际关系和一般的拉拉韦都是新手,所以我想我正在研究一些简单的事情。任何帮助和相关阅读(不是文档)都将不胜感激! 问题代码为:

     $status = array();
        $status[] = User::find(Auth::user()->id)->status;
        $friends = User::find(Auth::user()->id)->friend;
        $users = array();
        foreach($friends as $f){
            $users[] = User::find($f->friend_id)->friend;
        }
        foreach($users as $u){
            $status[] = $u->status; // this line is the issue
        }
        $data['status'] = $status;
    return View::make('index.index', $data);
    

    编辑: 表格如下所示:

    user                friends              status
    //////////////////   ////////////////    ////////////////
    // id           //   // id         //    // id         //
    // email        //   // user_id    //    // user_id    //
    // password     //   // friend_id  //    // status     //
    // first_name   //   // confirmed  //    // created_at //
    // last_name    //   // created_at //    // updated_at //
    // created_at   //   // updated_at //    ////////////////
    // updated_at   //   ////////////////
    //////////////////
    
    1 回复  |  直到 13 年前
        1
  •  0
  •   Glad To Help    13 年前

    您的关系可能设置不正确。

    您应该使用Eloquent来建模关系的方式是:

    class User extends Eloquent
    {
       public function friends()
       {
             return $this->belongsToMany('User', 'users_friends', 'user_id', 'friend_id');
       }
    
       public function statuses()
       {
            return $this->hasMany('Status');
       }
    }
    

    然后您可以使用这样的代码:

    $user = User::find(Auth::user()->id);
    $friends = $user->friends;
    $statuses = $user->statuses;
    
    $friends_statuses = array();
    
    foreach($friends as $friend)
    {
       $friends_statuses = array_merge($friends_statuses, $friend->statuses);
    }
    
    推荐文章