【问题标题】:Laravel created_by/modified_by relationsLaravel created_by/modified_by 关系
【发布时间】:2015-02-07 17:38:43
【问题描述】:

我试图让它以典型的belongsTo 关系工作。但是它一直说该列未在模型中设置,即使在实际数据库中查看它也是如此。

我已尝试查看源代码并尝试了许多方法来绕过此问题,但似乎没有任何作用。

public function modifiedBy()
{
    return $this->belongsTo('\Modules\Users\Model\User', 'modified_by');
}

public function createdBy() 
{
    return $this->belongsTo('\Modules\Users\Model\User', 'created_by');
}

这是模型内部的代码,我使用 PSR-0 来定义模块,更好地分割逻辑(没有问题)但是使用它会出错

Undefined property: \Modules\Module\Model\CurrentModel::$modified_by

这是来自将一些初始信息推送到数据库中的种子。

$user = Sentinel::findById(1);
$model = new CurrentModel;
$model->modifiedBy()->associate($user);
$model->save();

这基本上就是它的结合方式,我已经尝试了一段时间来找出问题所在,但我称之为空白。有什么想法吗?

【问题讨论】:

  • 不是说表中没有列,而是对象上没有属性。这对于Eloquent\Model 来说几乎是不可能的,因此请检查堆栈跟踪并找出错误发生的位置。
  • 我正在使用 artisan 来获取此错误,尚未将此功能构建到应用程序中,因为我没有任何测试数据。有没有办法通过工匠获取堆栈跟踪?
  • 确保您在运行 artisan 的环境中拥有 debug => true
  • 它被添加了,所以如果 artisan 在调试模式下显示堆栈跟踪,这是否意味着这是堆栈中唯一的错误?

标签: laravel-4 model eloquent


【解决方案1】:

找到了解决办法。虽然不是修复,但我认为这是 laravel 的一个问题,所以我可能会考虑将其添加为错误报告(尽管这可以在 laravel 5 中修复?)。

基本上使用 modified_by 我需要定义它正在使用的列,而不是让 laravel 自动生成它(为了“干净”地执行此操作)。然而,“错误”(仅将其称为错误,因为目前我只能将其视为一个意外问题)使您无法定义它将使用的列,您必须让 laravel 为您决定。

所以我把函数改成这样:

public function modifiedby()
{
    return $this->belongsTo('\Modules\Users\Model\User');
}

这使 laravel 假设该列是 modifiedby_id,但是通过更改我的迁移以反映没有更多错误。

【讨论】:

  • 简而言之 - 没办法 :) 你一定是在其他地方做错了什么。
  • 好吧,我展示的所有代码都是与此相关的所有内容,所以它隐藏在这个 :P 中的某个地方。没有时间与之抗争,所以如果这是我必须这样做的方式,那么就这样吧,可能看起来更干净,只是有 modified_by 但如果它必须是 modifiedby_id 那么嗯,我可以忍受它。如果有人有实际修复,那么我会标记答案^^。
猜你喜欢
  • 1970-01-01
  • 2018-12-23
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 2013-04-19
相关资源
最近更新 更多