HasOne laravel的条件

sycxhyv7  于 2023-01-27  发布在  其他
关注(0)|答案(5)|浏览(150)

在登录模型中实现了与图片表的关联

function picture () {
   return $this->hasOne('App\Picture');
}

现在,我需要图片.图片状态= 1和用户.用户状态= 1的数据

Login::with('picture')->where('picture_status', 1)->where('user_status',1);

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

hsvhsicv

hsvhsicv1#

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();
    }
}

你可以这样打电话;

$usersWithProfilePictures = Login::with('picture')->get();
3zwtqj6y

3zwtqj6y2#

这应该可以做到:

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

有时,您可能希望立即加载关系,但也要为立即加载查询www.example.com指定其他查询约束https://laravel.com/docs/5.2/eloquent-relationships#constraining-eager-loads

ygya80vv

ygya80vv3#

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

    function picture () {
       return $this->hasOne('App\Picture', 'id', 'user_id');
    }

    ................
    public function myF(){
         self::with('picture')->where('picture_status', 1)->where('user_status',1)->get();
    }
}
vuv7lop3

vuv7lop34#

如果有人仍然碰到这个问题,检索正确记录的最好方法是使用Laravel Query Builder with join:

$logins = DB::table('logins')
            ->join('pictures', 'logins.id', '=', 'pictures.login_id')
            ->select('logins.*', 'pictures.status')
            ->where('logins.status', 1)
            ->where('pictures.status', 1)
            ->get();

有关详细信息,请访问https://laravel.com/docs/6.x/queries#joins

xqk2d5yq

xqk2d5yq5#

您必须使用ofMany Laravel函数,这意味着模型具有多个中的一个

function picture()
{
    return $this->hasOne('App\Picture', 'id', 'user_id')->ofMany(
        function ($query) {
            return $query->where('picture_status', 1)->where('user_status', 1);
        });
}

相关问题