Я новичок в 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
Возникла ошибка: Попытка получить свойство не-объекта (View: 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-> 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-> name и id_brand-> name или просто разрешить его, как у меня?
Вопросы:
Что я должен сделать?
For Только для получения id_type-> name и id_brand-> name в моем datatable jquery?
Need Мне нужна сводная таблица и какой-то код на моделях и контроллерах? Или можно получить тип и название бренда непосредственно на представлении product.blade?
Извините за длинный вопрос. Буду благодарен за любую помощь. Спасибо!
Я не продвинутый пользователь mysql, но я думаю, что вам не нужна сводная таблица.
Вам нужны столы: productos, tipos и marcas.
Если вы обращаетесь к данным из модели «Продукт», вам нужно добавить это отношение в 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
Других решений пока нет …