我有两个表,我需要<div class="triangle-down"></div>
<style>
.triangle-down {
width: 0;
height: 0;
border-left: 15px solid transparent;
border-right: 15px solid transparent;
border-top: 20px solid #555;
}
</style>
pluck
中存在的有效构建ID(与$buildingIds
数组匹配的那些)并且必须确保它们不存在于buildings
中buildings_built
(所以我们知道需要建造哪些建筑物)。它可以在两个查询中轻松完成,但我尝试使用单个查询来提高效率:
$buildingIds = ['a1','b2','c3'];
Tables
// buildings (id, building_name) (a1, adam) (b2, barney) (c3, castor)
// buildings_built (id, building_id) (1, a1) (2, b2)
以下是我对此的尝试无效:
$buildingsToBuildFromIdsArray = Buildings::whereIn('buildings.id', $ids)
->whereNotIn('buildings_built.building_id', $ids)
->pluck('buildings.id');
理想情况下,查询应该返回['c3']
,因为该版本存在于buildings
表格中,buildings_built
表格中存在不(尚未构建) )。
知道如何让它正常工作吗?
答案 0 :(得分:1)
您可以做的是在两个模型之间创建关系 - 我将使用模型的默认命名为Building
和Build
:
class Building extends Model
{
public function builds(): HasMany
{
return $this->hasMany(Build::class, 'building_id', 'id');
}
}
class Build extends Model
{
public function building(): BelongsTo
{
return $this->belongsTo(Building::class, 'id', 'building_id');
}
}
要获取记录,您可以使用doesntHave
查询构建方法
Building::whereIn('id', $ids)->doesntHave('builds')->pluck('id');