2015-06-24 3 views
0

У меня есть проблема одна Produk есть много `spesifikasi» что-то вроде этого примераLaravel дисплей многие спецификации в одном продукте

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> 

я получаю неправильный результат
это стало чем-то вроде этого

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

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

я получить Лил ключ где я отсутствующий
в Еогеасп spesifikasi (вид) я должен дать некоторое условие
, но я не» знаю, как это исправить

моя структура базы данных, как это

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 } 

обновление Армен Markossyan

это моя модель
Produk.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'); 
    } 
} 

SpesifikasiProduk.php

<?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() 

, что я не хватает?


расширенный * можно создать новый поток

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

Пусть говорят Produk А имеет 4 Spesification
Produk B имеет 3 Spesification
Produk Chas 5 Spesification

с выше кодом , это дает результат примерно так

Produk A 
    - spek 1 
    - spek 2 
Produk B 
produk C 

если я изменить take значение 6 результат

Produk A 
    - spek 1 
    - spek 2 
    - spek 3 
    - spek 4  
Produk B 
    - spek 1 
    - spek 2 
produk C 

ответ

1

Вы должны читать об отношениях: http://laravel.com/docs/master/eloquent-relationships#defining-relationships

Читайте свои собственные слова: "один Produk есть много spesifikasi". Это означает, что вы можете установить связь «hasMany» между Produk и SpesifikasiProduk.

Нравится это следующим образом:

// 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) из модели.

+0

благодарит вас за ответ, но я все еще получаю сообщение об ошибке .... см. Мое сообщение для обновления – Neversaysblack

+0

i change -> all() to -> get() и все работает гладко спасибо – Neversaysblack

+0

hm ... я запутался как ограничить принимать только 2 "spesifikasi" .... если я использовал $ produk = Produk :: с ('SpesifikasiProduk') -> get() - take (2); это просто взять 2 produk только..не spesifikasi – Neversaysblack