Eloquent 使用一对一关系查询 parent table 总是 returns null

Eloquent Query always returns null for parent table using oneToOne relationship

Parent Table

users
schema | 'id','email','pass'

关系

 public function profile()
    {
        return $this->hasOne('App\Profile','user_id');
    }

其他Table

profiles
schema | 'id','user_id'/*foreign key to users table */ ,'address','city'

关系

public function user()
    {
        return $this->belongsTo('App\User','id');
    }

我正在查询 Profile 模型并希望它使用 User 模型进行预加载。

public function edit($id){
$profile = \App\Profile::with('user')->where('id','=',$id)->get();
                dd($profile);
}

这样我就可以加载用户的个人资料进行编辑,以及来自 User 模型的详细数据,如 emailpass

这 Returns user 的空关系 ??

此外,在 blade 中访问 $profile->user->email 时出现错误

Undefined property: Illuminate\Database\Eloquent\Collection::$user (View: C:\xampp\htdocs\laravel1\resources\views\profile\edit.blade.php)

这是 dd() 输出 http://bit.ly/1dA0R5p

它 returns 与 user 关系为空,我怀疑这是导致 blade.undefined property 错误的原因。

这种方法可行吗?我的关系正确吗?

P.S。早些时候,我在查询 User 模型和 eagerload Profile 模型时遇到了一个 vice-versa 案例,并且有效。
片段

 $users = \App\User::with('group','profile')->get(); //This was working

您收到 null 是因为您的关系定义有误。您的 profile 型号应该是

public function user()
{
    return $this->belongsTo('App\User','user_id');
}

错误是因为您试图从集合中获取 user 对象。

由于您使用 get() 检索数据,您收到的是一组配置文件,而不是单个配置文件。如果您想要单个配置文件,请使用 first() 方法而不是 get(),否则在循环中使用它。

@foreach ($profiles as $profile)
   {{ $profile->user->email }}
@endforeach

如果此行存在于子模型中,请删除 use SoftDeletes;

namespace App;
use Illuminate\Database\Eloquent\Model;
//use Illuminate\Database\Eloquent\SoftDeletes;
use App\User;
class Profile extends Model
{
//    use SoftDeletes;

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'profile';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ['address', 'user_id'];

protected $primaryKey = 'user_id';

public function user() {
    return $this->belongsTo('App\User');
}    
}

现在设置$primaryKey = 'user_id';

在透明模型中:

public function profile(){
    return $this->hasOne('App\Profile');
}

因此您可以检索用户个人资料

$profile = $user->profile? : new Profile;