请教 Eloquent 问题!!!

有两个model A B 查询A时(列表数据)希望通过 B下面的某个字段来做限制

A 与 B 的关系

class A extends Model
{
    public function relation()
   {
        return $this->hasOne(B::class);
    }
}

控制器中使用

    $id = 121212;

    $list = A::with(['relation'=>function ($query) {
              $query->where('condition_id',$id);
    }])->get();
//这样达不到要求    我只想取满足B里面字段condition_id = $id  的A得所有数据原生SQL太不优雅了,想用这种with方式 ,怎么写啊!!!麻烦指点。
zhouqiang2017

以B做主表???

JellyBool

根据 condition_id 取出 B,在 A whereIn 查 B 的 id?这样

zhouqiang2017

@jellyBool 只能这样分开写吗?大佬

yinchuanjiang

public function relation()
{
return $this->hasOne(B::class)->select(‘id’,‘其他字段’);
}

yinchuanjiang

id必须带上 要不然查不出来

zhouqiang2017 回复 yinchuanjiang

大佬 我的目的是想用B表中的某个字段 做限制条件来查A的数据哈!!! 不过还是谢谢了。

yugihuang

应该使用whereHas吧:)

$list = A::whereHas('relation', function ($query) use ($id) {
    $query->where('condition_id', '=', $id);
})->get();