首页 > 解决方案 > Laravel belongsTo 关系选择 orwhere

问题描述

我有 2 个模型

class Computers extends Model
{
protected $fillable=['abn','vipnet_name','ip_address','serialnumber','zone_id','computer_model_id'];

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

class Zone extends Model
{
protected $fillable=['name','parent_id','is_head'];
    public function computers()
    {
        return $this->hasMany('App\Computers');
    }
}

每台计算机都有一个区域(在表 [computers] 中有一列 [zone_id] 是表 [zone] 的外键)。

如果我想获得所有具有 [zone].[id]==1 或 [zone].[parent_id]==1 的区域的计算机,我正在使用此代码:

    $c=Computers::all();
    $res=[];
    foreach ($c as $key => $value) {
        if($value->zone->id==1 || $value->zone->parent_id==1)$res[]=$value;
    }
    return dd($res);

也许 ORM 查询有更好的方法来做到这一点?

标签: phplaraveleloquent

解决方案


您可以查询关系存在以仅获取相关区域值所在的计算机id1相关区域parent_id值所在的计算机1

$computers = Computers::whereHas('zone', function ($query) {
    $query->where(function($q) {
        $q->where('id', '=', 1)->orWhere('parent_id', '=', 1);
    });
})->get();

推荐阅读