一些事情。这是您的代码的改进版本:
$listing = Listing::create(array(
'title' => Input::get('title'),
'description' => Input::get('description')
));
$listing->categories()->attach(Input::get('category'), array(
'subcategory_id' => Input::get('subcategory'),
));
-
$listing->save() 方法不需要调用
Listing::create() 已经调用了 save 方法。
-
attach() 方法接受第二个数组参数,允许您输入有关数据透视表的更多信息(例如您的子类别 ID)
我建议查看 eloquent 文档以获取有关相关模型的更多提示。
http://laravel.com/docs/4.2/eloquent#inserting-related-models
来自 laravel 文档:
“您还可以传递一个属性数组,这些属性应该存储在关系的数据透视表中:”
$user->roles()->attach(1, array('expires' => $expires));
响应从查看父类别显示具有子类别的记录:
我们可以使用查询范围来为我们执行此操作(注意,这是使用包 etrepat/baum 时)。
此范围允许您按类别过滤模型,并查看输入类别下的所有记录。
将此函数放在您的 Listing 模型中:
public function scopeCategory($query, $category_id = NULL){
if($category_id){
/*
* Get descendants and self category nodes
*/
$categories = $this->categories()->find($category_id)->getDescendantsAndSelf();
/*
* Perform a subquery on main query
*/
$query->where(function ($query) use ($categories) {
/*
* For each category, apply a orWhere query to the subquery
*/
foreach($categories as $category){
$query->orWhere('category_id', $category->id);
}
return $query;
});
}
}
如何使用它(例如,使用类别 ID 为 1,您通常会使用 Input::get() 从用户那里获取):
$listings = Listings::category(1)->all();
这将返回 category_id 为 1 的所有列表,以及嵌套在此类别中的类别。