Laravel - 没有设置Eager加载的对象

时间:2014-07-02 10:51:18

标签: laravel eloquent eager-loading

我的laravel 4.0应用程序发生了一些奇怪的事情。我有表用户和表格配置文件。在他们的模型中:

// app/models/User.php:
public function profile(){
    return $this->hasOne('Profile', 'user_id');
}

// app/models/Profile.php:
public function user(){
    return $this->belongsTo('User');
}

我确信表格配置文件中的所有行都有一个user_id,并且它在表格用户中有一个相应的用户,反之亦然。但是当我这样做时:

$users = User::with('profile')->get();
foreach($users as $user){
    if(isset($user->profile)){
        print($user->profile->name);
    }
    else{
        print('profile is not set! why?!');
    }
}

有时候我会收到消息“未设置个人资料!为什么?!”

那么,为什么?!

1 个答案:

答案 0 :(得分:1)

也可能有其他原因。如果您确定相应的User具有相关Profile,请确保不删除这些配置文件。软删除模型经常会发生这种情况。如果您使用软删除,那么它也可能是一个问题。要了解你可以试试这些:

// Get the users who has related Profile
$users = User::has('profile')->with('profile')->get();

也试试这个:

// Get users with profile even soft deleted ones
$users = User::with(array('profile' => function($query) {
    $query->withTrashed();
}))->get();

比较两个结果。这只是猜测。