php - 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 查询有更好的方法来做到这一点?
解决方案
您可以查询关系存在以仅获取相关区域值所在的计算机id
或1
相关区域parent_id
值所在的计算机1
:
$computers = Computers::whereHas('zone', function ($query) {
$query->where(function($q) {
$q->where('id', '=', 1)->orWhere('parent_id', '=', 1);
});
})->get();
推荐阅读
- scala - 如何加入 DataFrames 的地图?斯卡拉火花
- google-bigquery - 从 Bigquery 查询 Bigtable 前缀
- python - 无法使用 REST API 调用访问/下载 Docker 容器内生成的文件夹
- azure - 发布函数时未返回 Azure Functions V2 Http 错误代码内容
- google-app-engine - GCloud SDK App Engine 部署与 webpack 返回 502 错误 nginx
- sas - SAS Proc REPORT:如何隐藏/消除多列的重复值
- r - 使用 Dplyr 使用另一列中的相应值填充空单元格
- javascript - 如何使 div 可以与其他 div 一起拖动
- python - 在 Python 中遍历字符串 xe-1/2/3 的方法
- java - 如何获得输出为“从员工中选择*”,从工资中选择*,从学生中选择*和从出勤中选择*