我的模型产品返回类似这样的内容
我需要使用lists()
来创建这样的内容:
列出(" category.name"," id")
但看起来这是不可能的。如何为下拉列表创建列表:
1 = electronics
2 = furniture
3 = cars
...
非常感谢
答案 0 :(得分:1)
你确定你确实建立了正确的关系吗?因为这正是lists()
通常所做的事情,并且创建这样的列表远非不可能
如果没有你的代码,你很难理解你是如何设计你的Eloquent逻辑的,但是在这里我将如何处理你的情况,假设你已经设置了category_product
数据透视表。
鉴于两个模型Product
和Category
,我定义了这两个关系的原因,据我所知,一个产品可以有几个类别,一个类别可以与几个产品相关联:
class Product extends Model
{
////////
public function categories()
{
return $this->belongsToMany('App\Category');
}
////////
}
和
class Category extends Model
{
////////
public function products()
{
return $this->belongsToMany('App\Product');
}
////////
}
此时,你很高兴,你需要做的就是获取你的清单
Product::findOrFail($id)->categories->lists('name','id')
这将返回一个包含与给定产品相关的所有类别的数组
array:[
1 => first-category
2 => second-category
3 => third-category
....
]
请注意,通过此设置,如果您想获得与给定类别匹配的所有产品的列表,它也可以反过来工作
Category::findOrFail($id)->products->lists('name','id')
在答案的最顶端,我假设你确实设置了一个数据透视表,但是,如果你没有,这里有一个快速提示: 在您的产品迁移中
public function up()
{
Schema::create('products', function (Blueprint $table) {
//
});
Schema::create('category_product', function (Blueprint $table){
$table->integer('category_id')->unsigned()->index();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
$table->integer('product_id')->unsigned()->index();
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->timestamps();
});
}
然后migrate
现在一切都已正确设置。最后但并非最不重要的是,如果您要使用此迁移,您需要修复模型中的关系,哪一个取决于您的应用程序逻辑:让我们说流程是创建一个新产品 - >选择创建表单中的类别,然后您需要在类别方法
timestamps()
return $this->belongsToMany('App\Category')->withTimeStamps();