我对Laravel很新,而且在理解Eloquent中的查询时遇到了问题。我有两个型号 - 笔记本电脑和位置。假设我想查询属于某个位置的所有笔记本电脑,这些笔记本电脑都有一个' stock'值为1.在SQL中,这将是一个左连接,但我如何在Eloquent中执行此操作?我已经将关系添加到两个模型中,因此笔记本电脑型号具有“位置”和“#39;方法,但我从哪里去?
答案 0 :(得分:1)
您可以使用查询范围。它们在Laravel documentation
中有详尽的记录在笔记本电脑型号中,您可以编写一个库存检查范围:
public function scopeInStock($query)
{
return $query->where('stock', 1);
}
为了保持清洁,您可以在位置模型中创建另一个关系:
public function laptopsInStock()
{
return $this->hasMany('Laptop')->inStock();
// or this way:
// return $this->laptops()->inStock();
}
现在要检索结果,有几个选项:
//all laptops
$location->laptops;
// in stock only
$location->laptopsInStock;
// eager loading
$location->with('laptopsInStock')->get();
答案 1 :(得分:1)
由于您没有提供任何代码,因此我将从基本代码中进行描述。
<强>迁移强>
地点表
<div class="row">
<div class="col-sm-4">
<div class="form-group field-user-user_dob has-success">
<label class="control" for="user-user_dob">Date of Birth</label>
<input type="text" id="datepicker" class="form-control" name="datepicker" readonly size="12">
<div class="help-block"></div>
</div>
</div>
</div>
笔记本电脑桌
Schema::create('locations', function(Blueprint $table){
$table->increments('id');
$table->string('name');
$table->timestamps();
});
<强>模型强>
位置模型
Schema::create('laptops', function(Blueprint $table){
$table->increments('id');
$table->string('name');
$table->integer('location_id')->unsigned();
$table->integer('stock');
$table->timestamps();
$table->foreign('location_id')
->references('id')
->on('locations')
->onDelete('cascade')
->onUpdate('cascade');
});
笔记本电脑型号
class Location extends Model {
public function laptops(){
return $this->hasMany('\App\Laptop');
}
}
如果您已经创建了这样的应用程序,那么有几种方法可以实现目标
这将查询属于某个位置并且库存值为class Laptop extends Model {
public function location(){
return $this->belongsTo('\App\Location');
}
}
的所有笔记本电脑。
1
1
2
Laptop::where('location_id','some_location_id')->where('stock',1)->get();
我希望这能解决你的问题。随意发表评论,并提出任何问题。