laravel - Laravel 版本升级影响你的控制器?
问题描述
我的报告控制器
use App\Site;
use App\Report;
public function showSpecificSite($site_id){
$reports = Report::whereHas('site', function($query) use($site_id) {
$query->where('site_id', $site_id);
})->get(['email_date', 'url', 'recipient', 'report_id', 'site_id']);
$siteName = Site::find($site_id)->site_name;
return view('newsite', compact('site_id', 'siteName', 'reports'));
}
Route::get('sites/{site_id}',['as'=>'SpecificSite','uses'=>'ReportController@showSpecificSite']);
场地模型
public function report()
{
return $this->hasMany('App\Report');
}
报告模型
public function site()
{
return $this->belongsTo('App\Site');
}
我的刀片视图
<a href="{{route('SpecificSite',['site_id'=>$record->site_id])}}">view</a>
这是我将 laravel 版本 5.2.36 升级到 5.4.36 的问题 这在 5.2 版本中运行良好 这是正在运行的文章。 包含两个参数的 Laravel 函数
SQLSTATE [42S22]:未找到列:1054 'where 子句'中的未知列'reports.site_site_id'(SQL:选择,,,,从哪里email_date
存在(选择*从哪里。= 。和= 1))url
recipient
report_id
site_id
reports
sites
reports
site_site_id
sites
site_id
site_id
我的 route:list 与之前相同。我也有我的 routes/web.app 文件夹。升级 laravel 版本时,您的控制器功能是否可能受到影响?任何想法如何解决这个问题。提前致谢。
解决方案
由于错误涉及在您的一个关系中使用的列,因此 Laravel 如何“猜测”关系(模型类)中的 FK 列名的方式更可能发生了变化,而不是控制器中的某些内容。
您可以在可选参数中明确指定 FK 名称 to belongsTo
,然后它不会猜到它。检查签名:
public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null)
鉴于您在 Reports-table 中的 FK 已命名site_id
,您将执行以下操作:
public function site()
{
return $this->belongsTo('App\Site', 'site_id');
}
我深入研究了一下,发现了重大变化(在 5.4 中引入):https ://github.com/laravel/framework/pull/16847 。
然而,这已记录在5.4 升级指南中:
如果在定义关系时没有明确指定外键,Eloquent 现在将使用相关模型的表名和主键名来构建外键。(...) [T]如果您覆盖[related] 模型的
$primaryKey
属性或方法,他的行为可能与以前的版本不同。getKeyName
推荐阅读
- python-3.x - 有没有更好的方法可以根据单个列的数据将行从一个数据帧替换为另一个?
- php - 避免将未定义的变量传递给 mysqli_stmt_bind_param?
- apache - 如何将带有查询字符串的动态页面 301 重定向到静态页面?
- vba - 在当前查看的电子邮件中搜索特定短语,获取要复制到剪贴板的字符串
- html - 如何使网格响应?
- java - java - 如何对由Java中的数字和字母组成的字符串列表进行排序?
- asp.net - ASP.net - Gridview 文本框输入按钮回发
- spring-cloud - 如何在 Eureka Discovery 中制作 spring cloud stubrunner 引导注册存根?
- graphql - GraphQL:嵌套查询与根查询
- html - 浮动左侧css