如何从 "belongsTo" 加载关系?

How do I load a relationship from "belongsTo"?

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

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

门票table

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

类别table

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”列,我想避免。

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

这里有什么解决方案?

提前致谢

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

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

并在工单模型中添加:

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

添加您已有的 PHP 8 个东西,它应该可以工作!

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

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