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.movie_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.movie_id FROM session WHERE session.id ='".$id."' and date = '".$date."') ;
$resultSet = DB::select($query);
希望这会有所帮助。
【讨论】:
【参考方案6】:使用左连接。 例如,
$first = DB::session('movie.title')->leftjoin('session','session.movie_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在哪里查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章