如何在join()中设置一个值,而不是在Eloquent中设置一个列名?

时间:2018-02-03 06:21:18

标签: laravel eloquent

这是我的计划:

user_familiarity

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'

2 个答案:

答案 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 因为你有特定的价值