Laravel 5.6 и Eloquent, сохраняющие дочернюю модель в базе данных, не могут найти методы hasMany или ownTo из модели - PullRequest
0 голосов
/ 05 сентября 2018

Я использую Laravel 5.6. У меня есть таблица Product и таблица ProductImages, где ProductImages имеет внешний ключ product_id.

На моем контроллере я без проблем сохранил свой продукт, а затем хочу сохранить одно или несколько изображений (ProductImages) на этом продукте.

Я делаю так:

$produto = Produto::find($produtoCriado);
$produto->imagens()->save(['url_imagem' => urlImagemExtra]);

Но тогда я получаю: Метод Illuminate \ Database \ Eloquent \ Collection :: imagens не существует.

Модель Produto:

class Produto extends Model {
    protected $table = 'produto';
    protected $fillable = [ 
        'nome', 'descricao_curta', 'descricao_longa', 'tags', 
        'url_imagem_principal', 'feito_por', 'feito_em', 'altura', 
        'largura', 'material'
    ];

    /***
     * Retorna as imagens relacionadas ao produto
     */
    public function imagens()
    {
        return $this->hasMany('App\ProdutoImagem');
    }
}

Модель ProdutoImagem:

class ProdutoImagem extends Model {
    protected $table = 'produto_imagem';
    protected $fillable = [
        'url_imagem'
    ];

    /***
     * Busca o Produto relacionado a essas imagens
     */
    public function produto()
    {
        return $this->belongsTo('App\Produto');
    }
}

Продукт сохраняется без проблем, но когда я пытаюсь добавить PrudutoImagem, я получаю сообщение об ошибке.

1 Ответ

0 голосов
/ 07 сентября 2018

Если вы используете save для дочернего класса, вы должны передать экземпляр модели как

$image = new ProductImage();
$image->url_imagem = urlImagemExtra;
$produto->imagens()->save($image);

или просто вы можете использовать метод создания как

$produto->imagens()->create(['url_imagem' => urlImagemExtra]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...