laravel - 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.php和AppState.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 中处理它,则不需要这样做。
谢谢你的建议
解决方案
您可以通过像属性一样调用关系方法来访问模型的关系值。
$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 只是访问该数据库的人,你就不需要这样做。但是,如果在不久的将来您决定迁移到不同的框架或在另一个应用程序中使用相同的数据库,那么最好将这些关系包含在迁移中。如果您不这样做,数据库管理员也可能会畏缩。
推荐阅读
- excel - 验证 Excel 用户窗体中特定多页页面上的文本框
- android - 在 Android 中将 firebase 数据库与 sqlite 数据库同步
- html - 颜色在不同部分的 webgrid 中未正确显示
- reactjs - 我的 gulp.js 文件只是第一次运行,然后就看不到了
- java - 我可以在不运行项目的情况下使用后端 api 吗?
- php - 使用 PHP 从 SQL 中选择随机行,但从特定点到点 ID
- c# - 无法在 WPF XAML 中转换对象
- android - 如果应用程序未关闭,则将用户重定向到登录登录(最小化)
- selenium - 如何在我的 Selenium 命令行(selenium-side-runner)测试中插入暂停(延迟)?
- javascript - 在总是选择相同目录的情况下如何编写
HTML 文件放在 Windows 本地,因为我只需要能够操作它们。每次在浏览器中选择同一个文件夹是很痛苦的。我想自动化在浏览器中选择一个文件夹的任务。
HTML
<input type="file" multiple ac