Laravel 4雄辩的查询生成器 – 复杂的连接与变量

前端之家收集整理的这篇文章主要介绍了Laravel 4雄辩的查询生成器 – 复杂的连接与变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用laravel查询构建器复制一个这样的连接:
LEFT JOIN content_userdata
ON content_id = content.id
AND user_id = $user_id

我发现我可以在我的模型中使用以下功能来进一步增加“ons”,这个扩展了Enloquent

public function scopeJoinUserData($query,$user_id)
{
    return $query->leftJoin('content_userdata',function($join)
    {
        $join->on('content_userdata_content_id','=','content.content_id')->on('content_userdata_user_id',10);
    });
}

但这会产生两个问题.首先,我不能得到$user_id变量的函数,其次即使我硬编码为测试目的,因为我已经做了上面(到“10”)Laravel包含它的意思是当它应该被解释为一个列名称不,像这样:

left join `content_userdata`
on `content_id` = `content`.`id`
and `user_id` = `10`

所以现在我有两个问题.

>使用查询范围时,我无法获取$user_id到join函数
>即使我无法将变量发送给连接,因为它总是将其解释为列名

为什么要这样做?
我意识到一个回应可能是把它放在一个地方.然而,我试图这样做,因为连接可能不一定返回任何结果(因此左连接),因为content_userdata表包含一个内容用户评级.如果我使用的地方,则content_userdata表中的任何结果将不会被返回,如果我可以把它放在连接中,那么由于左连接将返回.

有没有办法在Laravel中实现这一点,如果不是什么替代方案,显然完全改变了Laravel的顶部,但我唯一可以想到的方法是将用户数据单独查询.

解决方法

您需要使用use关键字将变量传递给闭包,该关键字将变量导入范围.例:
public function scopeJoinUserData($query,function($join) use ($user_id)
    {
        $join->on('content_userdata_content_id','content.content_id')
             ->on('content_userdata_user_id',DB::raw($user_id));
    });
}

这是一个PHP语法相关的问题,而不是Laravel限制!

猜你在找的MsSQL相关文章