Php 按关系列对日进行分组
在我的数据库中,我有一个listings表,它有一个category_id列,我也有一个categories表,每个列表可以有一个类别,但该类别可以在任意数量的列表中共享,我相信这意味着它是一个1:n关系,在我的模型中应该这样描述Php 按关系列对日进行分组,php,database,laravel,eloquent,relational-database,Php,Database,Laravel,Eloquent,Relational Database,在我的数据库中,我有一个listings表,它有一个category_id列,我也有一个categories表,每个列表可以有一个类别,但该类别可以在任意数量的列表中共享,我相信这意味着它是一个1:n关系,在我的模型中应该这样描述 class Category extends Model { protected $table = "categories"; protected $fillable = ['category']; public fun
class Category extends Model
{
protected $table = "categories";
protected $fillable = ['category'];
public function listings() {
return $this->belongsTo('App\Listing');
}
}
class Listing extends Model
{
use SoftDeletes, HasSlug;
protected $fillable = [
'name',
'slug',
'description',
'booking_details',
'cost',
'active',
'user_id',
'category_id',
'moderated'
];
protected $appends = [
'tagsList'
];
public function category() {
return $this->hasOne('App\Category');
}
}
我想做的是将所有列表按类别id分组,所以我认为这是正确的
$cats = Category::with('listings')->get();
这将返回所有类别,但列表属性为空,但我可以看到列表具有匹配的类别id,因此它们应该与类别一起返回。您的关系不正确。一个类别可以有许多列表
public function listings() {
return $this->hasMany('App\Listing');
}
如果listings表包含category_id字段,则您的关系设置错误 上市公司应具备:
public function category() {
return $this->belongsTo('App\Category');
}
public function listing() {
return $this->hasOne('App\Listing');
}
public function category() {
return $this->hasMany('App\Category');
}
public function listing() {
return $this->belongsTo('App\Listing');
}
public function category() {
return $this->belongsToMany('App\Category');
}
public function listing() {
return $this->belongsToMany('App\Listing');
}
类别应包括:
public function category() {
return $this->belongsTo('App\Category');
}
public function listing() {
return $this->hasOne('App\Listing');
}
public function category() {
return $this->hasMany('App\Category');
}
public function listing() {
return $this->belongsTo('App\Listing');
}
public function category() {
return $this->belongsToMany('App\Category');
}
public function listing() {
return $this->belongsToMany('App\Listing');
}
正如在这里的另一个答案中所述,您还指定了一对多关系,因此您应该在categories表上有listing_id,而不是listings表上的category_id,然后:
上市公司应具备:
public function category() {
return $this->belongsTo('App\Category');
}
public function listing() {
return $this->hasOne('App\Listing');
}
public function category() {
return $this->hasMany('App\Category');
}
public function listing() {
return $this->belongsTo('App\Listing');
}
public function category() {
return $this->belongsToMany('App\Category');
}
public function listing() {
return $this->belongsToMany('App\Listing');
}
类别应包括:
public function category() {
return $this->belongsTo('App\Category');
}
public function listing() {
return $this->hasOne('App\Listing');
}
public function category() {
return $this->hasMany('App\Category');
}
public function listing() {
return $this->belongsTo('App\Listing');
}
public function category() {
return $this->belongsToMany('App\Category');
}
public function listing() {
return $this->belongsToMany('App\Listing');
}
此外,如果一个类别实际上不属于某个列表,则需要一个名为category_listing的透视表,该透视表具有listing_id、category_id,并且具有以下关系
上市公司应具备:
public function category() {
return $this->belongsTo('App\Category');
}
public function listing() {
return $this->hasOne('App\Listing');
}
public function category() {
return $this->hasMany('App\Category');
}
public function listing() {
return $this->belongsTo('App\Listing');
}
public function category() {
return $this->belongsToMany('App\Category');
}
public function listing() {
return $this->belongsToMany('App\Listing');
}
类别应包括:
public function category() {
return $this->belongsTo('App\Category');
}
public function listing() {
return $this->hasOne('App\Listing');
}
public function category() {
return $this->hasMany('App\Category');
}
public function listing() {
return $this->belongsTo('App\Listing');
}
public function category() {
return $this->belongsToMany('App\Category');
}
public function listing() {
return $this->belongsToMany('App\Listing');
}
如果你对我的回答有什么不明白的地方,请告诉我。这是正确的。