我有一个与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 // ////////////////
//////////////////
答案 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);
}