Laravel 5.6和Eloquent将子模型持久化到数据库中,无法从模型中找到hasMany或belongsTo方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 5.6和Eloquent将子模型持久化到数据库中,无法从模型中找到hasMany或belongsTo方法相关的知识,希望对你有一定的参考价值。

我正在使用Laravel 5.6。我有一个表Product和一个表ProductImages,其中ProductImages具有product_id外键。

在我的控制器上,我坚持我的产品没有问题,然后我想将一个或多个图像(ProductImages)保留到此产品。

我这样做:

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

但后来我得到:方法Illuminate Database Eloquent Collection :: imagens不存在。

产品型号:

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('AppProdutoImagem');
    }
}

产品图片型号:

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('AppProduto');
    }
}

产品保存没有问题,但当我尝试添加PrudutoImagem时,我收到了错误。

答案

如果您对子类使用save,则应将模型实例作为

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

或者简单地说,您可以使用create方法作为

$produto->imagens()->create(['url_imagem' => urlImagemExtra]);

以上是关于Laravel 5.6和Eloquent将子模型持久化到数据库中,无法从模型中找到hasMany或belongsTo方法的主要内容,如果未能解决你的问题,请参考以下文章

text Laravel Eloquent数据库示例(5.6)

将 Sql 查询转换为 Eloquent Laravel 5.6

如何使用 Laravel 5.6 在 Laravel Eloquent 中实现嵌套 MySQL 查询

laravel 中的 Associate()

Laravel Eloquent模型单元测试

Laravel Eloquent 模型单元测试