Php Laravel 5.1将雄辩的关系应用于模型会抛出Tinker中找不到的类

Php Laravel 5.1将雄辩的关系应用于模型会抛出Tinker中找不到的类,php,laravel,eloquent,laravel-5,Php,Laravel,Eloquent,Laravel 5,我正在关注Laravel 5.x Laracast视频系列,现在它是关于建立雄辩的关系的,除了涉及的类之外,我写的都是一样的,但是当我尝试在tinker中测试时,我一直遇到“Class App\Vehicles Not Found”错误。没有车辆模型是正确的,但是由于模型是单数的,所以我不确定为什么会抛出错误。我已经运行了composer dump autoload,所以并不是没有看到文件 用户模型 /** * A user can have many vehicles. * * @ret

我正在关注Laravel 5.x Laracast视频系列,现在它是关于建立雄辩的关系的,除了涉及的类之外,我写的都是一样的,但是当我尝试在tinker中测试时,我一直遇到“Class App\Vehicles Not Found”错误。没有车辆模型是正确的,但是由于模型是单数的,所以我不确定为什么会抛出错误。我已经运行了composer dump autoload,所以并不是没有看到文件

用户模型

/**
 * A user can have many vehicles.
 *
 * @return \Illuminate\Database\Eloquent\Relations\HasMany
 */
public function vehicles() {

    return $this->hasMany('App\Vehicle');
}
车型

/**
 * A vehicle is owned by a user
 *
 * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
 */
public function owner()
{
    return $this->belongsTo('App\User');
}
数据库迁移和seed成功,我已经验证了seed中是否存在数据库记录

修补匠

$user = App\User::first(); // provides the proper user with id = 1
$vehicle = App\Vehicle::first(); // provides the proper vehicle with user_id of 1
但是

我已经看了3次视频,试图抓住任何问题,除了模型被命名为车辆,而不是文章没有任何区别

更新

在帮助下,解决了第一个问题,但致电:

App\Vehicle::first()->owner->toArray();
在belongsTo关系上抛出一个错误,表示:

[Symfony\Component\Debug\Exception\FatalErrorException]
Call to a member function toArray() on null

首先获取车辆对象,然后调用所有者模型,如下所示

$vehicle = App\Vehicle::first();
$vehicle->owner->toArray();
我花了一段时间,最终通过反复试验才弄明白这一点,结果却发现在文档中确实有一段关于这一点的文章,哈哈。下面是:

owner
关系无法找到任何相应的用户,因为它正在查找错误的列

Eloquent通过检查relationship方法的名称并用_id作为方法名称的后缀来确定默认外键名称。但是,如果手机型号上的外键不是user_id,则可以将自定义密钥名称作为第二个参数传递给belongsTo方法:

在您的情况下,它正在查找
所有者id
,而不是
用户id
。因此,或者将方法重命名为
user
,或者按照示例指定
'foreign\u key'
参数

您可以通过键入
dd(App\Vehicle::first()->owner)
查看关系模型,其中包含由Eloquent设置的外键属性


此外,考虑查看或解决N+ 1问题。

你是否偶然写了<代码>返回$> ->有许多(“APP \车辆”);
先用复数,然后不重新加载Tinker?这是我能想到的唯一一件事。嗨@JoelHinz,那就行了。我不知道你必须重新启动Tinker。我以为它有一块手表。非常感谢!!!在那里,做了那件事。。。太多次了。:)很高兴它对您有效。@JoelHinz您知道为什么车辆的belongsTo关系为空吗?第一部分App\Vehicle::first()工作,但owner的模型关系返回null,导致toArray()失败。我检查了关系、迁移和数据库中的记录。可能是因为您不调用方法
user
,而是调用
owner
,所以需要指定表和/或键。不确定,不客气。请注意,此行为特定于belongsTo。所有其他关系实际上都使用模型名称来自动确定表和列。你的困惑是完全可以理解的。他们为什么选择这种方法对我来说是个谜,但是是的。。幸运的是,我们可以选择覆盖和可怕的文档!
$vehicle = App\Vehicle::first();
$vehicle->owner->toArray();
/**
 * Get the user that owns the phone.
 */
public function user()
{
    return $this->belongsTo('App\User', 'foreign_key');
}