[英]whereDoesntHave not working with hasMany relationship as expected
[英]laravel hasMany relationship not working as expected
我有两个模型,分别称为类别和子类别
Category.php
class Category extends Model
{
protected $table = 'category';
public $timestamps = false;
public function subCategory(){
return $this->hasMany('App\Subcategory', 'category_id');
}
}
Subcategory.php
class Subcategory extends Model
{
protected $table = 'subcategory';
public $timestamps = false;
public function subCategory() {
return $this->belongsTo('App\Category');
}
我在数据库的subcategory
表中有一个名为category_id
外键列
这就是我试图在控制器中获取所选类别的所有子类别的方式
$subcategory = Category::all();
和我的刀片视图
<ul>
@foreach($categories as $categories)
<li class='has-sub'><a href='#'>{{ $categories->category_name }}</a>
<ul>
@foreach($subcategory->subCategory() as $sub)
<li><a href='#'>{{ $sub->subcategory_name }}</a></li>
@endforeach
</ul>
</li>
@endforeach
</ul>
我现在可以获取所有类别的名称,但无法获取该类别的子类别的名称。我在这里缺少什么?
您的模型很好,我将修改控制器并查看以下内容:
在您的控制器中
$categories = Category::with('subCategory')->get();
现在,在这种情况下,您的类别将渴望与子类别一起加载。 在您的示例中,您在foreach循环中进行查询,效率不高。
在您看来
<ul>
@foreach($categories as $category)
<li class='has-sub'><a href='#'>{{ $category->category_name }}</a>
<ul>
@foreach($category->subCategory as $sub)
<li><a href='#'>{{ $sub->subcategory_name }}</a></li>
@endforeach
</ul>
</li>
@endforeach
</ul>
注意变量名,如注释中提到的@ aldrin27! ($ categories-> $ category)
更多调整
您可以将一个模型用于类别和子类别:
function subCategory() {
return $this->hasMany('App\Category', 'category_id');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.