这是我的计划:
id, item_type, item_id, score, custom_score , ...
id , ...
user_familiarity存储任何对象的熟悉度分数,可以通过(item_type,item_id)标识
例如:
item_type = 1001,item_id = 16表示表格word
,行的ID为16
以下是我的代码,用它来熟悉分数:
$fam_table = UserFamiliarityModel::getTableName();
return
$query
->leftJoin($fam_table, function ($join) use($fam_table) {
$join
->on(WordModel::getTableName() . '.id' ,'=', "${fam_table}.item_id")
->on($fam_table . '.item_type' , 1001);
})
->addSelect(["${fam_table}.score", "${fam_table}.custom_score"]);
这是已执行的sql:
...
FROM
`word`
LEFT JOIN `user_familiarity`
ON
`word`.`id` = `user_familiarity`.`item_id`
AND `user_familiarity`.`item_type` = `1001`
并获得错误:
未找到列:1054未知列' 1001'
答案 0 :(得分:1)
...我通过将'on'更改为'where'解决了这个问题:
->leftJoin($fam_table, function ($join) use($fam_table) {
$join
->on(WordModel::getTableName() . '.id' ,'=', "${fam_table}.item_id")
->where($fam_table . '.item_type' , 1001);
})
答案 1 :(得分:0)
将on
更改为where
因为你有特定的价值