Заполнение базы данных с помощью 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');
}

}

что может быть не так?

Author: Comunidade, 2014-02-07

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();
 1
Author: J. Bruni, 2014-02-07 20:11:21

Удалось популярным делать так:

$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-более организованная...

Но я не уверен, если это правильно то, что я сделал... что вы думаете???

 0
Author: henrique, 2014-02-07 16:29:31