首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 9-镜面模型关系不起作用

Laravel 9-镜面模型关系不起作用
EN

Stack Overflow用户
提问于 2022-09-30 14:43:13
回答 2查看 96关注 0票数 0

我不明白为什么我那雄辩的关系不起作用。我有相关的网格和详细表(es )。grid.id = details.order_id)。这适用于前两个表,但不适用于几乎是第一个表副本的其他两个表。

工作关系代码:

OrderGrid模型:

代码语言:javascript
复制
use HasFactory;

protected $table = 'orders_grid';

protected $fillable = [
    'user_id',
     // more data
];

public function order_detail()
{
    return $this->hasMany('App\Models\OrderDetail');
}

OrderDetail模型:

代码语言:javascript
复制
    use HasFactory;

protected $table = 'orders_detail';

protected $fillable = [
    'order_id',
    // more data
];

public function order_grid()
{
    return $this->belongsTo('App\Models\OrderGrid', 'order_id', 'id');
}

在控制器中

代码语言:javascript
复制
$data_details = OrderDetail::where('order_id', $id)->get();

在望

代码语言:javascript
复制
$data_details->first()->order_grid->id
// so i can get the ID from the related table

,现在,我有两个更相似的模型,它们的关系不起作用:

OrderGrid模型2

代码语言:javascript
复制
use HasFactory;

protected $table = 'orders_grid_jde';

protected $fillable = [
    'total_order',
    // more data
];

public function detail_jde()
{
    return $this->hasMany('App\Models\OrderDetailJde');
}

OrderDetail模型2:

代码语言:javascript
复制
    use HasFactory;

protected $table = 'orders_detail_jde';

protected $fillable = [
    'order_jde_id',
];

public function grid_jde()
{
    return $this->belongsTo('App\Models\OrderGridJde', 'order_jde_id', 'id');
}

在主计长:

代码语言:javascript
复制
$data_details = OrderDetailJde::where('order_jde_id', $id)->get();

考虑到:

代码语言:javascript
复制
$data_details->first()->order_jde_id->id

如果我转储($data_details->first()) relations是空数组,就不会像前面显示的那样,这是行不通的。

工作关系上的另一个奇怪行为:如果我将$data_details->first()转储到控制器中,则不会看到这种关系,但如果在视图中这样做,它就会显示在屏幕上。

抱歉,这篇文章太长了,尽量让人理解。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-30 16:04:24

在Controller中,这样调用关系:

代码语言:javascript
复制
$data_details = OrderDetailJde::where('order_jde_id', $id)->with("grid_jde")->get();

查看:$data_details->first()

它会给所有的神。

现在应该管用了。

票数 0
EN

Stack Overflow用户

发布于 2022-09-30 15:46:25

在有错误的视图中,您将直接访问名为order_jde_id的字段,而不是访问关系grid_jde

技巧:

如果您计划在视图中使用这些关系,您应该急切地加载这些关系。

代码语言:javascript
复制
$books = Book::with('author')->get();

https://laravel.com/docs/9.x/eloquent-relationships#eager-loading

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73910439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档