我是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
(我的英文名字) 因此,表产品(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-&gt; 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.
}
ProductController的
public function index()
{
$products = $this->product->all();
return View::make('product.index', compact('product'));
}
问题3:我是否需要在此处添加一些代码来指定产品获取id_type-&gt;名称和id_brand-&gt;名称或者只是让它像我一样?
问题: 我需要做什么? ¿只是为了获取我的jquery数据表上的id_type-&gt;名称和id_brand-&gt;名称? ¿我需要一个数据透视表,并在模型和控制器上做一些代码?或者可以直接在view product.blade? p>上获取类型和品牌名称
很抱歉这个问题很长。我会感激任何帮助。谢谢!
答案 0 :(得分: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