条件与 HasOne laravel

Har*_*man 9 has-one laravel

在登录模型中,我与图片表有实现关系

function picture () {
   return $this->hasOne('App\Picture');
}
Run Code Online (Sandbox Code Playgroud)

现在我想要 Picture.picture_status = 1 和 User.user_status = 1 的数据

Login::with('picture')->where('picture_status', 1)->where('user_status',1);
Run Code Online (Sandbox Code Playgroud)

但是如果条件不适用于图片表,我如何在两个表上实施和条件

Cle*_*oth 5

这应该这样做:

Login::with(['picture' => function ($query) {
    $query->where('picture_status', 1)->where('user_status',1);
}])->get();
Run Code Online (Sandbox Code Playgroud)

有时您可能希望预先加载关系,但也为预先加载查询指定额外的查询约束 https://laravel.com/docs/5.2/eloquent-relationships#constraining-eager-loads


小智 5

class Login extends Model
{
    protected $primaryKey = 'id';

    function picture () {
       return $this->hasOne('App\Picture', 'id', 'user_id')->where('picture_status', 1)->where('user_status',1)->first();
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样调用;

$usersWithProfilePictures = Login::with('picture')->get();
Run Code Online (Sandbox Code Playgroud)

  • 不需要在末尾附加“first()”。 (6认同)
  • 如果在末尾添加“first()”,“$login->picture”将返回“null”。因为您将“图片”视为一种方法,而不是模型属性。您应该删除“first()”,然后您可以像模型属性“$login->picture”一样调用它。 (2认同)