Laravel 数据透视表属于ToMany
Posted
技术标签:
【中文标题】Laravel 数据透视表属于ToMany【英文标题】:Laravel Pivot Table belongsToMany 【发布时间】:2015-01-10 22:20:14 【问题描述】:我是 php 和 Laravel 的新手,所以我有很多疑问。 我正在使用 phpmyadmin 并有下一个关系:
Table:| productos | tipos | marcas | producto_tipo_marca (pivot table)
| id | id | id | id
| id_tipo | nombre | nombre | id_producto
| id_marca | | | id_tipo
| | | | id_marca
(我用英文工作名称) 因此,表 product(productos) 与 foreing_keys id_type(id_tipo) 和 id_brand(id_marca) 有关联。产品与类型和品牌具有多对多关系。
问题 1:是否需要数据透视表? (抱歉,我一个人在工作,有疑问)
我一直在使用 jquery 并列出数据(一切正常),但在 product.index 上我想显示 id_type->nambe 和 id_brand->nambe,但我只能在数据表上显示它是 id_type 和id_brand(仅显示数字数据):
查看:product.index
@foreach($products as $product)
<td> $product->id_type</td>
<td> $product->id_brand </td>
@endforeach
当我做类似的事情时:
@foreach($products as $product)
<td> $product->id_type->name</td>
<td> $product->id_brand->name</td>
@endforeach
出现错误:尝试获取非对象的属性(查看:C:\xampp\htdocs\posm\app\views\productos\index.blade.php)
所以,我看了很多教程,但无法获得核心。
在我的模型中有这个:
产品(型号)
protected $guarded = array();
protected $table = 'products';
protected $fillable = array('id_type','id_brand');
问题 2:我是否需要指定类似:id_type->name 或者我不能这样做?
类型(型号)
protected $guarded = array();
protected $table = 'type';
protected $fillable = array('name');
public function products()
return $this->belongsToMany('Product'); //Access the model Product.
品牌(型号)
protected $guarded = array();
protected $table = 'brand';
protected $fillable = array('name');
public function products()
return $this->belongsToMany('Product'); //Access the model Product.
产品控制器
public function index()
$products = $this->product->all();
return View::make('product.index', compact('product'));
问题 3:我需要在此处添加一些代码来指定产品获取 id_type->name 和 id_brand->name 还是让它像我拥有它一样?
问题: 我需要做什么? ¿ 只是为了获取我的 jquery 数据表上的 id_type->name 和 id_brand->name? ¿ 我需要一个数据透视表并在模型和控制器上做一些代码?或者可以直接在查看product.blade上获取型号和品牌名称?
抱歉,问题太长了。我将不胜感激任何帮助。谢谢!
【问题讨论】:
【参考方案1】:我不是高级 mysql 用户,但我认为您不需要数据透视表。 您需要这些表格:productos、tipos 和 marcas。
如果你从“Product”模型访问数据,你需要在Product.php中添加这个关系: (我不明白您的代码是使用英语还是西班牙语)。
public function type()
return $this->belongsTo('Type', 'type_id');
public function brand()
return $this->belongsTo('Brand', 'brand_id');
如果您需要在每个查询上自动加载此关系,则需要添加此属性:
public $with = ['type', 'brand'];
如果没有,您可以在查询时指定,而不是添加 $with 属性,如下所示:
Product::with(['type', 'brand'])->get();
那么你可以这样做:
$products = Product::with(['type', 'brand'])->get();
在视图中:
@foreach($products as $product)
$product->type->name
$product->brand->name
@endforeach
我没有测试代码,所以在使用之前检查一下!
Laravel 文档很棒,你应该看看它:http://laravel.com/docs/4.2/eloquent
【讨论】:
第一次尝试工作就是我,非常感谢您的帮助和时间!以上是关于Laravel 数据透视表属于ToMany的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5 hasManyThrough 数据透视表