Laravel选择多个where语句

时间:2014-04-25 23:53:36

标签: php sql laravel

我尝试了各种方法来解决这个问题,但没有一个方法适合我。

第一种方法

$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子句并且它有效。现在不要。有什么建议?提前谢谢。

3 个答案:

答案 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的方法也会有效,因为他提供的代码可以使用,但那是流利的符号...所以请你选择。