在尝试执行与用户相关的操作之前,我试图确保数据库中存在记录。当我像这样(出于测试目的)直接在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 = ?
答案 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模式的一种实现,它构建一个基础对象,然后创建它的副本以完成细节。
这只是避免在查询的任何地方对表名进行硬编码的一种方法。