我正试图在laravel eloquent方法中使用相关模型的类名,方法是使用“USE”为模型类的名称赋予别名。例如,我使用了UserProfile模型类:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\UserProfile;
现在我正如以下那样雄辩地使用它:
public function profileDetails() {
return $this->hasOne('UserProfile', 'user_id', 'id');
}
但这会引发Class 'UserProfile' not found
的错误
如果我直接在这个雄辩的第一个参数中传递相关模型的名称和路径,那么它工作正常
public function profileDetails() {
return $this->hasOne('App\Models\UserProfile', 'user_id', 'id');
}
我想知道为什么它不能与use
答案 0 :(得分:5)
当你use
一个类时,你只是导入它以便在该文件中使用,这样当你想引用它时就不必使用整个路径 - 把它想象成一个别名。还值得注意的是,完整的类路径与文件中的相对类名称不同。完整的类路径将始终包含完整的命名空间!
当您设置关系时,Eloquent需要完整的类路径,以便在使用自己的命名空间时可以构建对象。您可以在任何类上使用::class
来获取完整的类路径,在您的情况下为App\Models\UserProfile
。
采取以下示例:
Eloquent会认为关系类是\UserProfile
,它不存在。
public function profileDetails() {
return $this->hasOne('UserProfile', 'user_id', 'id');
}
Eloquent会寻找确实存在的班级\App\Models\UserProfile
!
public function profileDetails() {
return $this->hasOne('App\Models\UserProfile', 'user_id', 'id');
}
Eloquent会寻找确实存在的班级\App\Models\UserProfile
!这是引用其他类的最可靠方法。
public function profileDetails() {
return $this->hasOne(UserProfile::class, 'user_id', 'id');
}