Как связать данные в Laravel? Есть 3 таблицы:
Эти таблицы используют отношение One To Many. У Manufacturer может быть много Collection. У Collection может быть много Color.
Как посчитать сколько коллекций принадлежит производителю и сколько всего цветов? Производитель 1 имеет 2 коллекции каждая из которых содержит по 10 цвет.
Желаемый результат:
Model, Controller и View. Остальное 2 идентичны.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Manufacturer extends Model
{
public function collections()
{
return $this->hasMany('App\Collection');
}
}
.
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Manufacturer;
class ManufacturerController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$manufacturers = Manufacturer::all();
return view('admin.manufacturers.index', compact('manufacturers'));
}
}
.
@extends('layouts.admin')
@section('content')
<table class="table">
<thead>
<tr>
<th scope="col">Производитель</th>
<th scope="col">Коллекция</th>
<th scope="col">Цвет</th>
</tr>
</thead>
<tbody>
<tr>
@foreach ($manufacturers as $manufacturer)
<td><a href="{{ route('manufacturers.edit', $manufacturer->id) }}">{{ $manufacturer->name }}</a></td>
<td><a href="{{ route('collections.index', ['manufacturer' => $manufacturer->id]) }}">2</a></td>
<td><a href="{{ route('colors.index', ['manufacturer' => $manufacturer->id]) }}">5</a></td>
@endforeach
</tr>
</tbody>
</table>
@endsection
Посмотрите связь: has-many-through возможно она наведет на решение.
Код примерный:
class Manufacturer extends Model
{
public function colors()
{
return $this->hasManyThrough('App\Colors','App\Collection');
}
}
Так же из задачи не понятно нужны уникальные цвета или нет, а это разные решения.
Ставить id производителя в таблицу цветов думаю плохая идея.
Если брать не связь, а решение конкретной задачи, то
1) Можно написать 2 запроса через queryBuilder на нахождение количества
2) Коллекции посчитать через Лара-коллекции, а цвета через sql, что-то примерно:
$result = Manufacturer::with(['collections'=>function($query){
$query->withCount('colors');
}])->get();
$collections = $result->pluck('collections')->collapse();
$collectionsCount = $collections->count();
$colorsCount = $collections->sum('colors_count');
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как при помощи ORM RedBean вывести определённые данные? У меня есть таблица, которая называется "users", в ней есть 3 столбца: "id", "steamid" и "balance" Первая...
Я делаю переадресацию на поддомен в зависимости от выбранного городаУ меня получается сделать редирект только на конкретный URL, а нужно чтобы...