laravel hasMany 关系未按预期工作
laravel hasMany relationship not working as expected
我有两个模型叫做 category 和 sub-category
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
table 数据库
中有一个名为 category_id
的外键列
这就是我尝试在我的控制器中获取所选类别的所有子类别的方式
$subcategory = Category::all();
和我的 blade 观点
<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>
我现在可以获取所有类别的名称,但我无法获取 sub-categories 类别的名称。我在这里缺少什么?
你的模型很好,我会修改控制器并查看以下内容:
在您的控制器中
$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! ($类别 -> $类别)
更多调整
您可以为类别和子类别使用一个模型:
function subCategory() {
return $this->hasMany('App\Category', 'category_id');
}
我有两个模型叫做 category 和 sub-category
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
table 数据库
category_id
的外键列
这就是我尝试在我的控制器中获取所选类别的所有子类别的方式
$subcategory = Category::all();
和我的 blade 观点
<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>
我现在可以获取所有类别的名称,但我无法获取 sub-categories 类别的名称。我在这里缺少什么?
你的模型很好,我会修改控制器并查看以下内容:
在您的控制器中
$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! ($类别 -> $类别)
更多调整
您可以为类别和子类别使用一个模型:
function subCategory() {
return $this->hasMany('App\Category', 'category_id');
}