【问题标题】:Class 'app\Models\Phone' not found in Laravel 8在 Laravel 8 中找不到类“app\Models\Phone”
【发布时间】:2021-03-07 23:21:33
【问题描述】:

我正在尝试 ORM 一对一的关系。我不知道为什么它不能识别模型类手机。 代码如下。

电话.php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];


    public function Phone(){
        return $this->hasOne('app\Models\Phone');
    }
}

电话.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Phone extends Model
{
    use HasFactory;

    protected $table = "phones";

    public function User(){
        return $this->belongsTo('app\Models\User');
    }
}

用户控制器.php

<?php

namespace App\Http\Controllers;

use App\Models\Phone;
use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function insert(){
        $user = new User();
        $user->name = 'BBB';
        $user->email = 'bbb@mail.com';
        $user->password = 'bbb@mail.com';
        $user->save();

        $phone = new Phone();
        $phone->number = "445566";
        $user->Phone()->save($phone);

        return "RECORDS ADDED";
    }

    public function show($id){
        $phone = User::find($id)->phone;
        return $phone;
    }
}

web.php

<?php

use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});


Route::get('insert',[\App\Http\Controllers\UserController::class,'insert'])->name('user.insert');

Route::get('show/{id}',[\App\Http\Controllers\UserController::class,'show'])->name('user.show');

【问题讨论】:

  • 你试过了吗:composer dumpautoload

标签: php laravel eloquent laravel-8 eloquent-relationship


【解决方案1】:
namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];


    public function Phone(){
        return $this->hasOne('App\Models\Phone');
        
        //Better to use ::class notation for greater benefits with IDE
        //return $this->hasOne(Phone::class);
    }
}
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Phone extends Model
{
    use HasFactory;

    protected $table = "phones";

    public function User(){
        return $this->belongsTo('App\Models\User');
        
        //Better to use ::class notation for greater benefits with IDE
        //return $this->hasOne(User::class);
    }
}

文件夹/目录是app,但命名空间是App

所以需要将app\Models\Phoneapp\Models\User改为App\Models\PhoneApp\Models\User

更好的是,使用::class 表示法可以在 IDE 中获得更大的好处 - 例如轻松导航 - 字符串文字无法实现。

因此,而不是字符串文字 App\Models\Phone 导入 use App\Models\Phone 语句和 Phone::class

类似用户导入use App\Models\User,然后使用User::class

【讨论】:

    【解决方案2】:

    你需要解决这个问题

    public function User(){
        return $this->belongsTo('App\Models\User');
    }
    

    在这里修复命名空间 appApp 就像你需要修复所有

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 2021-03-11
      • 2021-12-28
      • 2017-06-07
      • 2017-10-04
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多