在laravel中使用相关模型的类

时间:2017-09-26 10:19:55

标签: php laravel-5 model eloquent relationship

我正试图在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

一起使用

1 个答案:

答案 0 :(得分:5)

当你use一个类时,你只是导入它以便在该文件中使用,这样当你想引用它时就不必使用整个路径 - 把它想象成一个别名。还值得注意的是,完整的类路径与文件中的相对类名称不同。完整的类路径将始终包含完整的命名空间!

当您设置关系时,Eloquent需要完整的类路径,以便在使用自己的命名空间时可以构建对象。您可以在任何类上使用::class来获取完整的类路径,在您的情况下为App\Models\UserProfile

采取以下示例:

  1. Eloquent会认为关系类是\UserProfile,它不存在。

    public function profileDetails() {
        return $this->hasOne('UserProfile', 'user_id', 'id');
    }
    
  2. Eloquent会寻找确实存在的班级\App\Models\UserProfile

    public function profileDetails() {
        return $this->hasOne('App\Models\UserProfile', 'user_id', 'id');
    }
    
  3. Eloquent会寻找确实存在的班级\App\Models\UserProfile!这是引用其他类的最可靠方法。

    public function profileDetails() {
        return $this->hasOne(UserProfile::class, 'user_id', 'id');
    }