【问题标题】:Laravel version upgrade affects your controller?Laravel 版本升级影响你的控制器?
【发布时间】:2018-08-25 00:18:04
【问题描述】:

我的报告控制器

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 Function that hold two parameters

SQLSTATE[42S22]:未找到列:1054 'where 子句'中的未知列'reports.site_site_id'(SQL:从@ 中选择email_dateurlrecipientreport_idsite_id 987654331@ where exists (select * from sites where reports.site_site_id = sites.site_id and site_id = 1))

我的 route:list 和之前一样。我也有我的 routes/web.app 文件夹。 当您升级 laravel 版本时,您的控制器功能是否可能受到影响?任何想法如何解决这个问题。提前致谢。

【问题讨论】:

  • 看起来 Laravel 如何“猜测”关系中的 FK 名称发生了一些变化(所以是 Model 类而不是你的 Controller)。您始终可以在 belongsTo 的可选参数中明确指定 FK 名称。
  • 我该怎么做? @TobiasK
  • 签名是public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null)。鉴于您在报告表中的 FK 名为 site_id,您会这样做:return $this-&gt;belongsTo('App\Site', 'site_id');
  • @TobiasK 你能回答我吗!~ 非常感谢

标签: laravel laravel-5.4


【解决方案1】:

由于错误涉及在您的一个关系中使用的列,因此 Laravel 如何“猜测”关系(模型类)中的 FK 列名的方式可能发生了变化,而不是控制器中的某些内容。

您可以在belongsTo的可选参数中明确指定FK名称,然后它不会猜到它。检查签名:

public function belongsTo($related, $foreignKey = null, $ownerKey = null, $relation = null)

假设您在报告表中的 FK 被命名为 site_id,您会这样做:

public function site()
{
    return $this->belongsTo('App\Site', 'site_id');
}

我深入研究了一下,发现了重大变化(在 5.4 中引入):https://github.com/laravel/framework/pull/16847

然而,这已记录在 the 5.4 Upgrade Guide

如果在定义关系时没有明确指定外键,Eloquent 现在将使用相关模型的表名和主键名来构建外键。 (...) [T]如果您覆盖 [related] 模型的 $primaryKey 属性或 getKeyName 方法,他的行为可能与以前的版本不同。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2021-02-07
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2016-04-22
    • 2015-05-26
    • 1970-01-01
    相关资源
    最近更新 更多