【问题标题】:How do I load a relationship from "belongsTo"?如何从“belongsTo”加载关系?
【发布时间】:2021-06-06 09:18:05
【问题描述】:

所以我有这个模型,'Ticket',它包含(除其他外)一个“category_id”列。

为简化起见,我的数据如下所示:

票务表

id Title category_id
1 Issue #1 2
2 Issue #2 4
3 Issue #3 1

类别表

id Title
1 Authentication
2 Account
3 Billing

在我的Ticket 模型中,我完成了以下操作:

/**
 * @return Category
 */
public function category(): Category
{
    return Category::firstWhere($this->category_id);
    // return $this->belongsTo('App\TicketCategory'); <-- how it was, can't eager load.
}

但我收到的是undefined function addEagerConstraints()

编辑:这是我的控制器:

class TicketController extends Controller
{
    public function index()
    {
        $tickets = Ticket::with('category')->all();
        // dd($tickets);
        return view('tickets.index', compact('tickets'));
    }
}

我也尝试过使用hasOne,但这意味着“类别”需要一个“ticket_id”列,我想避免这种情况。

我希望我的模型只选择与它们相关的类别,仅此而已。

这里有什么解决方案?

提前致谢

【问题讨论】:

  • 我没有看到belongsTo!除了分享导致该错误的控制器代码之外,请
  • 我用控制器和我正在谈论的 BelongsTo 编辑了我的问题

标签: laravel relationship


【解决方案1】:

在您的类别模型中,有以下代码:

public function tickets()
{
    return $this->hasMany(Ticket::class);
}

并将其添加到票证模型中:

public function category()
{
    return $this->belongsTo(Category::class);
}

添加你已经拥有的 PHP 8 的东西,它应该可以工作了!

编辑: 我看到你添加了更多关于如何正确加载的内容。您在控制器中已有的代码也应该适用于此。您可能需要更改我提供的方法中的模型类名称,但这应该可以解决问题!

有关此类关系(一对多)的更多信息,请阅读this part of the documentation

【讨论】:

  • 该死的,我为什么要为此奋斗这么多。非常感谢,我只能在 5 分钟内接受您的回答,但非常感谢您为我的盲人指出显而易见的事情!
  • @Jaeger 不用担心!发生在我们所有人身上。盯着同一个代码看几个小时会让你对这类问题视而不见;)
猜你喜欢
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2013-12-25
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多