如何在PHP中和带有where子句的地方使用Laravel查询生成器?

时间:2019-01-29 20:10:55

标签: php laravel laravel-5 laravel-query-builder

在尝试执行与用户相关的操作之前,我试图确保数据库中存在记录。当我像这样(出于测试目的)直接在PHPMyAdmin中直接执行查询时。

SELECT * FROM `chat_participants` WHERE `chat_id` = 2 AND `user_id` = 2

我收到正确的记录。但是,当我尝试使用Laravel查询生成器来实现相同功能时。

dd($this->participants
    ->where('chat_id', '=', 2)
    ->where('user_id', '=', 2)
    ->get()
    ->first());

我得到null.,有什么方法可以使用Query Builder确保记录存在于数据库中?我需要在查询生成器中声明AND吗?

更新:我在构造函数中设置了participants变量。

public function __construct()
{
    $this->middleware('auth');
    $this->header = DB::table('chat_headers');
    $this->participants = DB::table('chat_participants');
    $this->messages = DB::table('chat_messages');
}

toSql()产生:

select * from chat_participants` 
    inner join chat_headers on chat_headers.id = chat_participants.chat_id 
    inner join chat_rbac on chat_rbac.id = chat_participants.rbac 
 where chat_participants.chat_id = ? and chat_participants.user_id = ? 
    and chat_id = ? and user_id = ?

1 个答案:

答案 0 :(得分:2)

在PHP中,对象是通过引用传递的,这意味着您在使用<v-card v-for="video in videos" :key="video.snippet.resourceId.videoId"> <v-img :src="video.snippet.thumbnails.high.url" :id="video.snippet.resourceId.videoId" :lazy-src="`https://picsum.photos/10/6?image=${2 * 5 + 10}`" @click="renderVideo(id)" ></v-img> </v-card> renderVideo(id) { console.log(this.$attrs["id"]); } 属性的任何地方都将指针传递给相同的Query Builder对象。因此,在大多数情况下,您需要为每个查询实例化一个新的查询构建器对象。

但是,PHP确实允许克隆对象,这将允许您传递基本查询构建器并在您使用它的任何地方重新开始

participants

这是Prototype OO模式的一种实现,它构建一个基础对象,然后创建它的副本以完成细节。

这只是避免在查询的任何地方对表名进行硬编码的一种方法。