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