我尝试了各种方法来解决这个问题,但没有一个方法适合我。
第一种方法:
$title = Character::find($selected_char->id)->title()->where('title', '=', 'Castle');
$title = $title->where('title', '=', 'City');
$title = $title->get();
第二种方法:
$title = Character::find($selected_char->id)->title()->where('title', '=', 'Castle')->where('title', '=', 'City')->get();
第三种方法:
$title = DB::select(DB::raw("select * from titles where titles.char_id = 5 and title = 'Castle' and title = 'City'"));
以上方法均无效。如果我只采用一个where子句,它就能完美运行。例如:
$title = Character::find($selected_char->id)->title()->where('title', '=', 'City')->get();
$title = Character::find($selected_char->id)->title()->where('title', '=', 'Castle')->get();
我甚至尝试使用另一个列而不是标题,但它不适用于第二个函数。我想从title表中检索行,其中标题是City和Castle我在单个select语句中使用过多个where子句并且它有效。现在不要。有什么建议?提前谢谢。
答案 0 :(得分:5)
你说:
我想从title表中检索标题为City AND Castle
的行
你可以试试这个:
$rowCOllection = DB::table('titles')
->whereIn('title', array('City', 'Castle'))->get();
使用多个where
:
$rowCOllection = DB::table('titles')
->where('title', 'City')
->where('title', 'Castle')->get();
如果您想为titles.char_id
添加另一个where子句,那么您可以使用它:
$rowCOllection = DB::table('titles')
->where('title', 'City')
->where('title', 'Castle')
->where('char_id', 5)->get();
在调用where
方法之前,您可以根据需要链接尽可能多的get()
。您可以在where('char_id', 5)
whereIn
之后添加whereIn(...)->where('char_id', 5)
,然后拨打get()
。
如果你有Title
模型,那么你可以使用以下方法做同样的事情:
Title::where(...)->where(...)->get();
与使用DB
相同,仅将DB::table('titles')
替换为Title
,例如:
$rowCOllection = Title::where('title', 'City')
->where('title', 'Castle')
->where('char_id', 5)->get();
这里Character
怎么样?
答案 1 :(得分:1)
我真的不知道如何在php中使用->where(
,但在sql中这是错误的:
当你说where title = 'a' and title = 'b'
时,就像你说的那样:好吧给我一些0 = 1 它什么都不返回。
你可以这样做:
select * from titles where titles.char_id = 5 and (title = 'Castle' or title = 'City')
检索title等于城堡或城市的所有数据
或
select * from titles where titles.char_id = 5 and title IN ('Castle','City')
使用IN
检索title等于城堡或城市的所有数据我很确定你也会在PHP中找到一种方法。
答案 2 :(得分:0)
假设您使用的是Laravel 4
而角色是你从Eloquent扩展的模型
不要混合使用FIND和WHERE。
查找是针对单次使用查找和排序(按顺序排列等)
所以,如果你想链接你的查询
Character::where()->where()->where()-get() (don't forget the get or else you wont get a result)
请注意,->title()
的第一种方法存在缺陷,因为您调用的是自定义在模型中创建的函数 - 这就是为什么它不起作用。
注意:如果你不想使用Eloquent,那么WereWolf Alpha的方法也会有效,因为他提供的代码可以使用,但那是流利的符号...所以请你选择。