Laravel在哪里查询[重复]

Posted

技术标签:

【中文标题】Laravel在哪里查询[重复]【英文标题】:Laravel where in query [duplicate] 【发布时间】:2015-07-29 10:39:38 【问题描述】:

我将如何使用 Laravel 做到这一点?

SELECT movie.title
FROM movie
WHERE movie.id IN
(SELECT session.movie_id FROM session WHERE session.id = :id and date = :date)

【问题讨论】:

@Mysteryos 只是在谷歌上搜索,但我还没有找到任何东西 从这里开始:laravel.com/docs/4.2/eloquent 【参考方案1】:

使用 DB::raw 运行原始查询

$query = DB::select(DB::raw("选择电影.title 从电影 movie.id 在哪里 (select session.movi​​e_id from session where session.id = $id and date = $date);"));

返回$查询;

【讨论】:

【参考方案2】:

你可以使用laravel的advanced-wheres:

$movie = Movie::whereIn('id', function($query) use ($id, $date) 
    $query->select(DB::raw('session.movie_id'))
          ->from('session')
          ->whereRaw('session.id = ? and session.date = ? array($id, $date));

)
->get();

【讨论】:

【参考方案3】:

首先,您需要一个包含电影和会话表的数据库以及 Laravel 中的两个模型。

电影模型

    <?php namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Movie extends Model 

      protected $fillable = ['title'];

      public function sessions()
      
          return $this->hasMany('App\Session');
      
      
    ?>

会话模型

    <?php namespace App;

    use Illuminate\Database\Eloquent\Model;

    class Session extends Model 

      public function movies()
      
          return $this->belongsTo('App\Movie','movie_id');
      
    ?>

您的控制器中的查询将具有类似的方法。

public function show($id)

    try 
        $movie = Movie::with('sessions')->where('id',$id)->firstOrFail();
    
    catch(ModelNotFoundException $exception)
    
        abort(404);
    
    return view('movies.show')->withMovie($movie);

【讨论】:

【参考方案4】:

无论您使用 laravel ORM,它都会生成多个查询,我建议您先在会话表中查询并获取列表,然后在电影模型中的 where 查询中使用该结果。

【讨论】:

【参考方案5】:

$query = "select movie.title from movie where movie.id IN (SELECT session.movi​​e_id FROM session WHERE session.id ='".$id."' and date = '".$date."') ;

$resultSet = DB::select($query);

希望这会有所帮助。

【讨论】:

【参考方案6】:

使用左连接。 例如,

$first = DB::session('movie.title')->leftjoin('session','session.movi​​e_id','=','movie.id')->where('session.id' , '=', $id)->where('session.date','=','$date')->get();

要检查结果,

dd(第一);

希望这会有所帮助。

【讨论】:

【参考方案7】:
$query = "SELECT movie.title
    FROM movie
    WHERE movie.id IN
    (SELECT session.movie_id FROM session WHERE session.id = ? and date = ?)";

$movie = \DB::select($query, [$id, $date]);

【讨论】:

【参考方案8】:

使用 LEFT JOIN 是优化代码的好选择。否则请查看以下说明。

以下代码行将生成获取电影 ID 的查询。使用“toSql()”方法将返回查询而不是结果。

$movie_id_qry = DB::table('session')->select('session.movie_id')->whereRaw('session.id = '. $id .' && date = '. $date)->toSql();

同样可以包含这个查询来获取电影标题:

$movie_title = DB::table('movies')->where('movie.id', '=', $movie_id_qry)->pluck('movie.title');

结果:echo $movie_title;

如果找到匹配,“pluck()”方法将只返回标题列。 要检索整行,请使用“get()”方法而不是“pluck()”。

由于“toSql()”方法只会生成查询,组合的数据库提取只发生在第二行代码中。

希望这有帮助。

【讨论】:

【参考方案9】:
DB::table('movies')
  ->select(
    movies.title, 
    DB::raw(
      '(select session.movie_id from session where session.id = id AND date = date') as movie_id'
    )
  )->where('movies.id','movie_id')get();

【讨论】:

以上是关于Laravel在哪里查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询生成器 - 日期现在在哪里使用碳

如何在 Laravel-5 中构建子查询 [重复]

将 PHP SQL 转换为 Laravel 查询构建器 [重复]

Laravel 4.1 多对多关系和条件在哪里?

Laravel 雄辩的 ORM 群在哪里

Laravel - 在简单的数据库查询内存泄漏/“允许的内存大小为 .. 字节耗尽”之后 [重复]