我有两个主表,其中包含多对多关系和一个数据透视表。
型号'输入'
public function attributes()
{
return $this->belongsToMany('App\Attribute', 'attribute_type');
}
模型'属性'
public function types()
{
return $this->belongsToMany('App\Type', 'attribute_type');
}
数据透视表' attribute_type'
Schema::create('attribute_type', function (Blueprint $table) {
$table->increments('id');
$table->integer('type_id')->unsigned();
$table->foreign('type_id')->references('id')->on('types');
$table->integer('attribute_id')->unsigned();
$table->foreign('attribute_id')->references('id')->on('attributes');
});
我希望以随机顺序显示属于id<类型的5个属性。 10。
$attributes = Attribute::whereHas('types', function ($query) {
$query->where('id', '<', '10');
})->orderByRaw("RAND()")->limit(5);
,例如
$attribute->id
给我&#34; Undefined属性:Illuminate \ Database \ Eloquent \ Builder :: $ id&#34;
答案 0 :(得分:2)
您所要做的就是执行查询并使用$attribute
方法获取集合,如下所示:
protected $casts = [
'id' => 'integer',
'courses.pivot.course_id' => 'integer',
'courses.pivot.active' => 'boolean'
]
现在您正在尝试遍历查询构建器,该构建器为{{1}}
提供了另一个查询构建器答案 1 :(得分:1)
您有两个选择:
$attributes = Attribute::whereHas('types', function ($query) {
$query->where('types.id', '<', '10');
})->orderByRaw("RAND()")->limit(5);
或
$attributes = Attribute::whereHas('types', function ($query) {
$query->where('attribute_type.type_id', '<', '10');
})->orderByRaw("RAND()")->limit(5);