Laravel 使用where和relations查找有说服力的模型
我有三个数据库表、集线器、房间和设备,如下所示 数据库表和列Laravel 使用where和relations查找有说服力的模型,laravel,eloquent,octobercms,Laravel,Eloquent,Octobercms,我有三个数据库表、集线器、房间和设备,如下所示 数据库表和列 集线器:id,name 房间:id、hub\U id、姓名 设备:id、房间id、名称 你可以想象,我有三个模型 class Hub extends Model { public $hasMany = ['rooms' => ['Models\Room']]; } class Room extends Model { public $hasMany = ['devices' => ['Models\Devic
- 集线器:id,name
- 房间:id、hub\U id、姓名
- 设备:id、房间id、名称
class Hub extends Model {
public $hasMany = ['rooms' => ['Models\Room']];
}
class Room extends Model {
public $hasMany = ['devices' => ['Models\Device']];
public $belongsTo = ['hub' => [
'Models\Hub',
'key' => 'hub_id'
]];
}
class Device extends Model {
public $belongsTo = ['room' => [
'Models\Room',
'key' => 'room_id'
]];
}
我有以下数据记录
枢纽
- 1号,HubOne
- 2,2
- 轮毂(1)客厅(客厅灯、走道灯)
- 轮毂(1)卧室(卧室灯、台灯)
- 轮毂(1)厨房(台灯)
- 轮毂(2)客厅(客厅灯、走道灯)
$rooms = Room::with('devices')
->where('hub_id', $hub_id)
->where(function ($query) use ($term) {
$query->whereHas('devices', function ($query) use ($term) {
$query->where('device_name', 'LIKE', '%' . $term . '%');
})->orWhere('title', 'LIKE', '%' . $term . '%');
})->get();
$devices = $rooms->lists('devices');
此代码应适用于:
$devices = Device::where(function($query) use ($term) {
$query->where('device_name', 'like', '%' . $term . '%')
->whereIn('room_id', function($sub_query) use ($term) {
$sub_query->select('id')->from('rooms')
->where('room_name', 'like', '%' . $term . '%');
}, 'or')
})
->whereIn('room_id', function ($query) use ($hub_id) {
$query->select('id')->from('rooms')
->where('hub_id', $hub_id)
})->get();