首页 > 解决方案 > laravel/elequent - 模型和关系

问题描述

我试图学习 laravel 并做一些测试/演示应用程序。我现在一直在努力解决 laravel/eloquent 表的关系。我需要建议。

我有 3 个模型 [Application, Term, AppState] 及其表applications [id, terms_id, appStates_id, and other cols], terms [id, startDate, endDate, ...], app_states [id, caption]

应用程序.php

    public function term()
    {
        return $this->belongsTo('App\Term');
    }
    public function appState()
    {
        return $this->belongsTo('App\AppState');
    }

Term.phpAppState.php我有:

    public function applications()
    {
        return $this->hasMany('App\Application');
    }

我怎样才能让我们在刀片中为每个应用程序说“caption”/“startDay”+“endDate”?我可以在 foreach 循环中获取他们的 ID $app->terms_id/ $app->appStates_id,但我想从表中获取caption值。app_states

必须在迁移中也指定这种关系吗?在某些 tuts 中提到,如果我只想在 laravel 中处理它,则不需要这样做。

谢谢你的建议

标签: laraveleloquent

解决方案


您可以通过像属性一样调用关系方法来访问模型的关系值。

$application = Application::find(1);

$application->term->startDate;
$application->term->endDate;
$application->appState->caption;

此外,您与的关系AppState是错误的,因为您的外键不跟随snake_case输入,您需要为其提供适当的键

public function appState()
{
    return $this->belongsTo('App\AppState', 'appStates_id');
}

您可能还想检查一下terms_id,因为模型名称 ( Term) 是单数,但外键是复数。

必须在迁移中也指定这种关系吗?在某些 tuts 中提到,如果我只想在 laravel 中处理它,则不需要这样做。

好吧,是的,如果 Laravel 只是访问该数据库的人,你就不需要这样做。但是,如果在不久的将来您决定迁移到不同的框架或在另一个应用程序中使用相同的数据库,那么最好将这些关系包含在迁移中。如果您不这样做,数据库管理员也可能会畏缩。


推荐阅读