CodeIgniter Eloquent Model Модель класса не найдена - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь внедрить eloquent в мой проект CodeIgniter.

Это хорошо работает, когда я вызываю модель в моем проекте (она дает мне данные из моей базы данных). Но когда я пытаюсь вызвать отношение для его модели, оно пошло не так и выдает следующее сообщение:

An uncaught Exception was encountered
Type: Error

Message: Class 'application\models\Profile' not found

Filename: /var/www/public/chupspace-git/vendor/illuminate/database/Eloquent/Model.php

Line Number: 750

Backtrace:

File: /var/www/public/chupspace-git/application/models/User.php
Line: 12
Function: hasOne

File: /var/www/public/chupspace-git/vendor/illuminate/database/Eloquent/Model.php
Line: 2638
Function: profile

File: /var/www/public/chupspace-git/vendor/illuminate/database/Eloquent/Model.php
Line: 2573
Function: getRelationshipFromMethod

File: /var/www/public/chupspace-git/vendor/illuminate/database/Eloquent/Model.php
Line: 3263
Function: getAttribute

File: /var/www/public/chupspace-git/application/controllers/UserController.php
Line: 53
Function: __get

File: /var/www/public/chupspace-git/index.php
Line: 357
Function: require_once

Я использую "illuminate/database": "5.0.28", библиотеку в моем composer.json

Вот моя модель

User.php

if (!defined('BASEPATH')) exit('No direct script access allowed');

use \Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent {
    protected $table = "users";

    public function profile()
    {
        return $this->hasOne('application\models\Profile');
    }
}

Profile.php

if (!defined('BASEPATH')) exit('No direct script access allowed');

use \Illuminate\Database\Eloquent\Model as Eloquent;

class Profile extends Eloquent {
    protected $table = "user_profiles";
}

А вот моя карта каталогов.

enter image description here

Дайте мне знать, если отсутствует информация, чтобы я мог обновить эту ветку. Ваша помощь очень важна для меня. Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я нашел решение. Нам просто нужно изменить

$this->hasOne('application\models\Profile');

будет

$this->hasOne(new Profile());

Вот мой полный код.

<?php

if (!defined('BASEPATH')) exit('No direct script access allowed');

use \Illuminate\Database\Eloquent\Model as Eloquent;

class User extends Eloquent {
    protected $table = "users";

    public function profile()
    {
        // dd();
        return $this->hasOne(new Profile());
    }
}

Это хорошо работает для меня.

0 голосов
/ 13 ноября 2018

Вам необходимо загрузить все классы отношений, прежде чем использовать его.

Прежде всего вам необходимо включить в application/config/config.php автозагрузку композитора.Просто установите $config['composer_autoload'] на TRUE

Затем вам нужно увеличить composer.json для загрузки каждой модели:

{
"autoload": {
    "classmap": ["application/models/"]
}

}

Затем вам нужно регенерироватьфайл автозагрузки (запускается в cli):

composer dump-autoload

Должно быть, работает.Есть и другие способы сделать это, но я думаю, что это самый ясный.

...