Заполнение базы данных с помощью Eloquent ORM
у Меня есть база данных, некоторые таблицы уже заполнены, но у меня теперь есть популярный в таблицы, которые имеют внешний ключ, я пытаюсь так:
$tamanho = Tamanho::find(2);
$genero = Genero::find(1);
$categoria = Categoria::find(2);
$estampa = Estampa::find(1);
$pedido = Pedido::find(1);
$produto = new Produto;
$produto->descricao = 'Lançamento 2012';
$produto->tamanhos()->associate($tamanho);
$produto->generos()->associate($genero);
$produto->categorias()->associate($categoria);
$produto->estampas()->associate($estampa);
$produto->quantidade = '120';
$produto->vunitario = '50';
$produto->save();
$produto->pedidos()->save($pedido);
$pedido->produtos()->save($produto);
Но он возвращает мне ошибку:
Call to undefined method Illuminate\Database\Query\Builder::associate()
Model Продукте:
class Produto extends Eloquent
{
// Produtos has_many Tamanhos
public function tamanhos()
{
return $this->hasMany('Tamanho');
}
// Produtos has_many Generos
public function generos()
{
return $this->hasMany('Genero');
}
// Produtos has_many Estampas
public function estampas()
{
return $this->hasMany('Estampa');
}
// Produtos belongs_to Categorias
public function categorias()
{
return $this->belongsTo('Categoria');
}
// Produtos belongs_to_many Pedidos
public function pedidos()
{
return $this->belongsToMany('Pedido');
}
}
что может быть не так?
2 answers
Новый Ответ:
Оригинальный ответ, сдержана в конце. Она будет права, если отношения были даже hasMany
...
, Но то, что случилось именно это определение отношения в модели! Так, что hasMany
время работают, понятно, что продукт может иметь различные размеры, различные жанры, и различные принты. Но относится к КАТЕГОРИИ ТОЛЬКО (из - belongsTo
).
Просто исправить отношения в моделях код, используя associate
будет работать а что.
class Produto extends Eloquent
{
// Produto belongs to Tamanho
public function tamanho()
{
return $this->belongsTo('Tamanho');
}
}
class Tamanho extends Eloquent
{
// Tamanhos has many Produtos
public function produtos()
{
return $this->hasMany('Produto');
}
}
Внесите исправления в остальные отношения.
Оригинальный Ответ
Метод associate
будет работать, объединения (belongsTo
.
В вашем случае, вы, кажется, не пытается использовать его в отношении hasMany
.
Все отношения belongsTo
("принадлежит") , единственном. Например, "адрес" и "пользователь". Адрес относится к пользователя. Таким образом, я могу использовать associate
:
$usuario = Usuario::find(3);
$endereco = Endereco::find(9);
$usuario->endereco()->associate($endereco);
// onde "endereco" BELONGS TO "usuario"
Уже отношения hasMany
("есть несколько") множественном. associate
не будет работать, поскольку вы можете только связать объект, "associate", и не сборник или нескольких объектов.
В отношении hasMany
, разместите ассоциации по другой элемент, элемент, который belongsTo
, таким образом:
$produto = new Produto;
$produto->descricao = 'Lançamento 2012';
$produto->quantidade = '120';
$produto->vunitario = '50';
$produto->save();
$tamanho->produto()->associate($produto)->save();
$genero->produto()->associate($produto)->save();
$categoria->produto()->associate($produto)->save();
$estampa->produto()->associate($produto)->save();
Удалось популярным делать так:
$produto = new Produto;
$produto->descricao = 'Lançamento 2012';
$produto->tamanho_id = $tamanho->id;
$produto->genero_id = $genero->id;
$produto->categoria_id = $categoria->id;
$produto->estampa_id = $estampa->id;
$produto->quantidade = '120';
$produto->vunitario = '50';
$produto->save();
$produto->pedidos()->save($pedido);
$pedido->produtos()->save($produto);
И В конце концов у меня есть pivot table, который хранит produto_id и i pedido_id, потому что так я могу сделать запрос к продукции конкретного запроса, и пусть bd-более организованная...
Но я не уверен, если это правильно то, что я сделал... что вы думаете???