Laravel在一个产品中显示许多规格

时间:2015-06-24 04:45:43

标签: php laravel-4

我有问题一个产品有很多`spesifikasi'就像这个例子

http://

使用此代码

我的控制器

Produk 1
  Spek a
  Spek b
  Spek c

Produk 2
  Spek x
  Spek y

我的观点

public function getDashboard() {
    $produk         = Produk::all();
    $spesifikasi    = SpesifikasiProduk::all()->take(2);
    return View::make('admin-page.admin-produk')
                -> with('produk', $produk )
                -> with('spesifikasi', $spesifikasi);
}

我得错了结果
它变成了这样的东西

@foreach ( $produk as $produk )
   <tr>
      <td>{{ $produk['nama_produk']}}</td>
      <td>{{ substr($produk['deskripsi'], 0, 130).' . . .' }}</td>
      <td>
         @foreach ( $spesifikasi as $spek )
             {{ $spek['title_spek'] }} : {{ $spek['spek'] }} ||
         @endforeach
      </td>
      <td><img src="../{{ $produk['display_thumb'] }}"></td>

我得到一条痘痘线索,我错过了 在foreach spesifikasi(查看)我应该给出一些条件
但我不知道如何解决它

我的数据库结构是这样的

Produk 1
  Spek a
  Spek b
  Spek c
  Spek x
  Spek y

Produk 2
  Spek a
  Spek b
  Spek c
  Spek x
  Spek y

更新 Armen Markossyan

这是我的模特
Produk.php

produk { id_produk, nama_produk, deskripsi, dispaly_thumb, created_at, updated_at}

produk_spek { id_spek, id_produk, title_spek, spek, created_at, updated_at }

SpesifikasiProduk.php

<?php
    class Produk extends Eloquent {
    protected $table = 'produk';
    protected $primaryKey = 'id_produk';
    protected $fillable = array('id_produk', 'nama_produk', 'deskripsi', 'display_thumb');

    public function SpesifikasiProduk() {
        return $this->hasMany( new SpesifikasiProduk, 'id_produk');
    }

    public function ImageProduk() {
        return $this->hasMany(new ImageProduk, 'id_produk');
    }
}

我已经改变成这样了

我的控制器

<?php
class SpesifikasiProduk extends Eloquent {
    protected $table = 'produk_spek';
    protected $primaryKey = 'id_spek';
    protected $fillable = array('id_produk', 'title_spek', 'spek');

    public function produk() {
       return $this->belongsTo('Produk');
    }
}

我的观点

public function getDashboard() {
    $produk         = Produk::with('SpesifikasiProduk')->all();
    return View::make('admin-page.admin-produk')
                -> with('produk', $produk );
}

但我仍然会收到这样的错误

 @foreach ( $produk as $produk )
     <tr>
         <td>{{ $produk['nama_produk'] }}</td>
         <td>{{ substr($produk['deskripsi'], 0, 130).' . . .' }}</td>
         <td>
             @foreach ( $produk->SpesifikasiProduk as $spek )
                   {{ $spek['title_spek'] }} : {{ $spek['spek'] }} ||
             @endforeach
         </td>
 @endforeach

我缺少什么?

扩展*可能创建新主题

Call to undefined method Illuminate\Database\Query\Builder::all()

让我们说produk A有4个spesification
produk B有3个spesification
produk Chas 5 spesification

使用上面的代码,它会给出类似这样的结果

public function SpesifikasiProduk() {
    return $this->hasMany( new SpesifikasiProduk, 'id_produk')->take(2);
}

如果我将Produk A - spek 1 - spek 2 Produk B produk C 值更改为6 结果是

take

1 个答案:

答案 0 :(得分:1)

你必须阅读有关人际关系的信息: http://laravel.com/docs/master/eloquent-relationships#defining-relationships

阅读你自己的话:“一个产品有很多spesifikasi”。这意味着您可以在ProdukSpesifikasiProduk之间建立“hasMany”关系。

请执行以下操作:

// Produk model
<?php

namespace App\Models;

class Produk extends \Eloquent {

    public function spesifikasi()
    {
        return $this->hasMany(new SpesifikasiProduk, 'id_produk');
    }

}

您的控制器代码:

public function getDashboard() {
    $produk = Produk::with('spesifikasi')->get();
    return View::make('admin-page.admin-produk')
                -> with('produk', $produk);
}

您的观点:

@foreach ( $produk as $produk )
   <tr>
      <td>{{ $produk['nama_produk']}}</td>
      <td>{{ substr($produk['deskripsi'], 0, 130).' . . .' }}</td>
      <td>
         @foreach ( $product->spesifikasi as $spek )
             {{ $spek['title_spek'] }} : {{ $spek['spek'] }} ||
         @endforeach
      </td>
      <td><img src="../{{ $produk['display_thumb'] }}"></td>
@foreach
祝你好运!

<强> UPD:

有很多方法可以达到你想要的效果。

最简单的方法是使用@for代替@foreach

@for ($i = 0; $i < 2; $i++)
    {{ $product->spesifikasi[$i]['title_spek'] }} : {{ $product->spesifikasi[$i]['spek'] }} ||
@endfor

当然,您必须从模型中删除take(2)