我有这个代码来创建一个集合:
$rank_entities_by_capacity = Entity::join('entity_capacitytypes', function($q){
$q->on('entitys_id', '=', 'entities.id');
$q->where('capacitytypes_id','=', '23');
})->
leftJoin('user_attitudes', function($q){
$q->on('entity_id', '=', 'entities.id');
$q->where('item_type', '=', 'entity');
})
->selectRaw('entities.*, SUM(user_attitudes.importance) AS importance')
->groupBy('entities.id')
->orderBy('importance', 'desc')
->take(6)
->get();
1052专栏' entity_id' in on子句含糊不清:
[2015-01-01 13:22:28] production.ERROR:FATAL DATABASE ERROR:500 = SQLSTATE [23000]:完整性约束违规:1052列' entity_id' on on子句是不明确的(SQL:选择实体。*,SUM(user_attitudes.importance)来自entities
entity_capacitytypes
entity_id
entities
id
capacitytypes_id
的重要性{{1} }和user_attitudes
= 23在entity_id
= entities
id
和item_type
= entities
上的实体组id
左侧加入importance
。join('entity_capacitytypes', function($q){
$q->on('entitys_id', '=', 'entities.id');
$q->where('capacitytypes_id','=', $capacity);
})->
按 public function entities()
{
return $this->belongsToMany('Entity', 'entity_capacitytypes', 'capacitytypes_id', 'entitys_id');
}
desc limit 6)[] []
我花了一个多小时的时间寻找绕过问题的技巧: 为了避免此错误,我被迫将表 entity_capacitytypes 中的列名从 entity_id (它导致问题)更改为 entitys_id 。 现在我的数据库名称不一致。还有其他方法可以避免错误吗?
如果我将此部分添加到查询中,并尝试在其中行中使用以前完美的工作变量
$rank_entities_by_capacity = Capacitytype::find($capacity)->entities()->
leftJoin('user_attitudes', function($q){
$q->on('entity_id', '=', 'entities.id');
$q->where('item_type', '=', 'entity');
})
->selectRaw('entities.*, SUM(user_attitudes.importance) AS importance')
->groupBy('entities.id')
->orderBy('importance', 'desc')
->take(6)
->get();
我收到此错误: 未定义变量:容量
如何使变量有效?
我的解决方案:再次避免。
我不能修复连接,所以我使用了Capacitytype模型中定义的关系:
{{1}}
而是使用join,我从另一个模型
访问了Entity{{1}}
使变量在连接中起作用
答案 0 :(得分:1)
修复"不明确的列"问题你只需要指定包括表格的完整列名称
entity_capacitytypes.entity_id
而非entity_id
要在闭包(也称为匿名函数)中使用$capacity
之类的局部变量,您需要使用use
join('entity_capacitytypes', function($q) use ($capacity){
$q->on('entitys_id', '=', 'entities.id');
$q->where('capacitytypes_id','=', $capacity);
})