繁体   English   中英

Laravel 的 hasOne 与belongsTo 返回空值

[英]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

我看不到我的错误,但我认为它可能在我传入的参数hasOnebelongsTo

注意:我正在访问外部数据库 (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM