加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:31:28 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试使用laravel查询构建器复制一个这样的连接: LEFT JOIN content_userdataON content_id = content.idAND user_id = $user_id 我发现我可以在我的模型中使用以下功能来进一步增加“ons”,这个扩展了Enloquent public function scopeJoinUserData($qu
我正在尝试使用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限制!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读