Laravel Pivot Table属于ToMany

时间:2014-11-13 17:12:03

标签: php laravel phpmyadmin foreign-keys eloquent

我是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?上获取类型和品牌名称

很抱歉这个问题很长。我会感激任何帮助。谢谢!

1 个答案:

答案 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