[英]Laravel hasOne vs belongsTo returns null
我对 Laravel 很陌生,我试图返回两个有关系的表的值,但我收到了null
。
在我的控制器中,我正在传递with('image')
。
$products = Produtos::select('codigo', 'descricao', 'CT', 'Fotos')->with('image')->take(2)->get();
return response()->json($products);
图像模型
class Objetos extends Model
{
protected $table = 'Imagens';
public function produtos(){
return $this->belongsTo(\App\Produtos::class);
}
}
产品型号
class Produtos extends Model
{
public function image(){
return $this->hasOne(\App\Objetos::class, 'Chave');
}
}
有关系的列是:
Objetos.Chave = Produtos.id
我看不到我的错误,但我认为它可能在我传入的参数hasOne
和belongsTo
。
注意:我正在访问外部数据库 (MS SQL),但我认为这不是问题。
首先,您应该更改Image
模型上的关系,您的foreign key
不遵循 Laravel命名约定,您必须指定它,就像您在Product
模型上所做的那样,即:
public function produtos(){
return $this->belongsTo(\App\Produtos::class, 'Chave');
}
但真正的问题在于您的查询:
Produtos::select('codigo', 'descricao', 'CT', 'Fotos')->with('image')->take(2)->get();
在这里,您错过了将id
添加到所选字段,然后 laravel 无法预先eager load
相关的Image
模型,因此您应该像这样更改该行:
Produtos::select('id', 'codigo', 'descricao', 'CT', 'Fotos')->with('image')->take(2)->get();
恕我直言,我的建议是不要使用select()
限制在模型上检索的字段,如果您有适当的关系,您可能会遇到这种错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.