0

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

 $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   //   ////////////////
//////////////////
4

1 回答 1

0

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

您应该使用 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);
}
于 2013-10-01T20:00:29.983 回答