2016-09-11 2 views
-1

У меня есть несколько таблиц:Показать сообщения в категории (Laravel)

Категория:

id: 1 title: Shirt 
id: 2 title: Pant 
id: 3 title: Hat 

продукт:

... (product has some columns and 1 col is category_id) 

И то, что я хочу, чтобы отобразить в виду является:

1. 5 newest posts for all categories 
2. 5 newest posts for each category 

В принципе, это будет выглядеть так:

--* Title :All *-- 

5 Newest posts 

- * Название: Рубашка * -

5 Новые сообщения, которые CATEGORY_ID: 1

--* Title :Pant*-- 

5 Newest posts which category_id :2 

- * Название: * Hat -

5 Новые сообщения которые category_id: 3

Любые советы, я искал в google, но не нашел ответа: ((

+0

Что ваша проблема? Вы можете легко достичь этого с помощью некоторого запроса. – MoeinPorkamel

+0

Что вы пробовали? –

+0

В принципе, я новичок, я не знаю, как это решить :( –

ответ

1

Поскольку у вас есть две таблицы, вы бы создать две модели, одна для категории и для продукта. Вы можете сделать это, запустив php artisan make:model Category и php artisan make:model Product

Теперь у вас есть эти модели в папке App /.

Добавьте следующие строки в категории модель в App \ Категории

public function products() 
    { 
     return $this->hasMany('\App\Product', 'category_id', 'id'); 
    } 

Перейти к контроллеру, который хочет, чтобы обработать эти данные и добавить в верхнем

use App\Category; 
use App\Product; 
  1. 5 новейшими Должности по всем категориям

    $ product = Продукт :: take (5) -> orderBy ('id', 'desc') -> get();

  2. 5 новых сообщений для каждой категории

    $ категории = Категория :: получить();

    foreach ($ Категории as $ Category) { $ products [$ Category-> name] = $ Category-> products() -> take (5) -> orderBy ('id', 'desc') - > получить(); }

Теперь передать это мнение, я, как с помощью «$ данных» массив, содержимое этого массива можно обращаться непосредственно в воззрениях раз прошли как так

$data = array(); 
$data['all_products'] = $product; 
$data['category_products'] = $products; 

Это может затем быть передан в

return View('products.detail', $data); 

где products.detail ваш взгляд

Теперь вы можете перебрать эти данные в вашей точки зрения, как - * Название: Все * -

@foreach($all_products as $product) 
{{$product->name}} 
@endforeach 
+0

Вы дарите лучшее спасибо: d –

+0

Добро пожаловать @ end_lesslove2012 – AceKYD

0

Если у вас есть категория модели, как это:

class Category extends Model 
{ 
    public function posts() 
    { 
     return $this->hasMany('\App\Post', 'category_id', 'id'); 
    } 
} 

Вы можете принять 5 Последние Поста каждой категории легко:

$Categories = Category::get(); 

foreach ($Categories as $Category) { 
    $Posts = $Category->posts()->take(5)->orderBy('id', 'desc')->get(); // Get 5 Posts 
} 
+0

Но как я могу передать его на просмотр? –

+0

Посмотрите здесь: 'https: // laravel.com/docs/5.3/views', но вы всегда можете запустить php прямо на виду (что грязно) – MoeinPorkamel

Смежные вопросы