laravel 4:关系似乎不会多次工作

时间:2013-10-01 19:30:14

标签: laravel relational-database laravel-4

我有一个与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   //   ////////////////
//////////////////

1 个答案:

答案 0 :(得分: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);
}