我在Laravel 4.2中有一个雄辩的陈述,看起来像这样
$user_message_block = Message::where('responder_id', '=', Auth::user()->id)
->where('user_id', '=', $user->id)->first();
然后,如果$user\u message\u block
不存在,我还必须检查一个相反的情况,我这样做。。。
if(!$user_message_block){
$user_message_block = Message::where('responder_id', '=', Auth::user()->id)
->where('user_id', '=', $user->id)->first();
}
我真正想做的是运行一个查询,同时检查两种情况。。
在伪表达式中,我需要如下内容:
$user_message_block = Message::where('responder_id', '=', Auth::user()->id,
'AND', 'user_id', '=', $user->id,
'OR', 'responder_id', '=', $user->id,
'AND', 'user_id', '=', Auth::user()->id)->first();
所以基本上我需要
SELECT Message where (responder_id=x AND user_id=y) OR where (responder_id=y AND user_id=x)
我怎么能用雄辩的语言做到这一点呢。我找不到更多关于或雄辩的陈述。
谢谢
更新:
经过更多的寻找,我发现这似乎工作(仍在测试很多)
$user_message_block =
Message::where(['responder_id' => Auth::user()->id, 'user_id' => $user->id])
->orWhere(['user_id' => Auth::user()->id, 'responder_id' => $user->id])
->first();
或
$user_message_block =
Message::where(['responder_id' => Auth::user()->id, 'user_id' => $user->id])
->orWhere(['user_id' => Auth::user()->id, 'responder_id' => $user->id])
->get();
这有什么缺点需要我考虑吗?
我把这个解决方案归功于诺亚,因为他提供了一个有效的解决方案,并努力帮助我。然而,我最终使用了不同的解决方案...
$user_message_block =
Message::where(['responder_id' => 'x', 'user_id' => 'y'])
->orWhere(['user_id' => 'x', 'responder_id' => 'y'])
->get();
在我的特殊情况下,我只需要找到第一个记录,所以这对我有用
$user_message_block =
Message::where(['responder_id' => 'x', 'user_id' => 'y'])
->orWhere(['user_id' => 'x', 'responder_id' => 'y'])
->first();
我只想说,我在Alex的phpacademy视频中找到了一个类似的解决方案。我偶然发现了这个带有OR和where子句的过于夸张的SQL查询
在雄辩中做这件事可能非常复杂,但这正是使用Laravel的查询生成器所需要的,而不会恢复到原始SQL。
DB::table('messages')
->where(function($query)
{
$query->where('responder_id', '=', 'x')
->where('user_id', '=', 'y');
})
->orWhere(function($query) {
$query->where('responder_id', '=', 'y')
->where('user_id', '=', 'x');
})
->get();
这是我在其上运行toSql()
得到的结果:
select * from `messages` where (`responder_id` = ? and `user_id` = ?) or (`responder_id` = ? and `user_id` = ?)
试试这个,看看它是否适用于雄辩。
Message::where(function($query) {
$query->where('responder_id', '=', 'x')
->where('user_id', '=', 'y');
})->orWhere(function($query) {
$query->where('responder_id', '=', 'y')
->where('user_id', '=', 'x');
})->get();
它应该工作。
问题内容: 我怎么说 对于更复杂的查询,我应该使用原始SQL吗? 问题答案: 利用参数分组(Laravel4.2)。以您的示例为例:
我尝试从带有多个where和/或子句的表中获得结果。
问题内容: 对于拍摄特定的对象我有目标的一个在线竞赛 用户 上传 图片 的 对象 ,其中对象具有 类别 和 子类别 。 用户的仪表板应如下所示: 为了能够在适当的循环中输出图片,我在模型之间安装了 hasMany 关系。所以我可以通过以下方式获得具有方便层次结构的对象 问题: 对于仪表板,我当然只希望来自某个用户的图像: Pictures 模型包含一个 user_id 字段。我可以直接获取用户的图
我有以下雄辩的模型: 用户id 邮政编码 评论| id |发布| id |用户| id 使用eloquent,如何获取特定用户尚未发表评论的所有帖子? 到目前为止,我试过: 在模范岗位: 在模型注释中:
问题内容: 我正在尝试使用Eloquent在数据库种子期间执行以下查询: 这是我在Eloquent中的实现: 尽管第一个查询始终返回完整结果,但Eloquent等价项始终为表的和字段以外的所有内容返回空元素。由于和模型都是工匠生成的骨架,因此我无所适从。 例如: 这是当我对种子(最初由Faker生成)的第一个口才查询dd()时输出的数组: 问题答案: 可以通过指定特定表中所需的特定列名来解决,如下
问题内容: 认为我是Laravel初学者 目标是:我有两个列,现在我需要在表中以同一行作为前缀。 例如(工作)…我有Mysql 和输出是 ID 我需要用laravel雄辩的方式来表示,因为这里Component是Model name。所以我尝试了类似的东西 但这不起作用。 我认为是因为语法错误。 请帮助我正确的语法。使用 。 注意:我进行了上述查询,将其称为Internet上可用的查询。 问题答案