Разработка плагина OctoberCMS: проблемы со связями «много-много» - класс не найден

Я действительно изо всех сил пытаюсь заставить отношения OctoberCMS работать в плагине, который я пишу. У меня есть две таблицы: products и product_images. Между product и product_images существует связь "один ко многим".

В моей модели продуктов у меня есть:

public $hasMany = [
    'product_images' => ['Bt/Shop/Models/ProductImages']
];

У меня есть модель ProductImages, которая находится в plugins / bt / shop / models / ProductImages.php. Модель определяется как:

<?php namespace Bt\Shop\Models;

use Model;

class ProductImages extends Model
{
    public $table = 'bt_shop_product_images';

    protected $dates = ['published_at'];

    public static $allowedSortingOptions = array(
        'name asc' => 'Name (ascending)',
        'name desc' => 'Name (descending)',
        'updated_at asc' => 'Updated (ascending)',
        'updated_at desc' => 'Updated (descending)',
        'published_at asc' => 'Published (ascending)',
        'published_at desc' => 'Published (descending)',
    );

    public $preview = null;

    public $belongsTo = [
        'products' => ['Bt/Shop/Models/Products']
    ];

    ...

А определение моей модели продуктов выглядит так:

<?php namespace Bt\Shop\Models;

use Model;

class Products extends Model
{

    public $table = 'bt_shop_products';

    protected $dates = ['published_at'];

    public static $allowedSortingOptions = array(
        'name asc' => 'Name (ascending)',
        'name desc' => 'Name (descending)',
        'updated_at asc' => 'Updated (ascending)',
        'updated_at desc' => 'Updated (descending)',
        'published_at asc' => 'Published (ascending)',
        'published_at desc' => 'Published (descending)',
    );

    public $preview = null;

    public $hasMany = [
        'product_images' => ['Bt/Shop/Models/ProductImages']
    ];

Я получаю следующее сообщение об ошибке:

Класс ProductImages не найден

/var/www/mysite/public/vendor/october/rain/src/Database/Model.php строка 772

Я считаю, что когда определяется отношение Product hasMany, код почему-то не знает о классе ProductImages. Код в Model.php, строка 772:

public function hasMany($related, $primaryKey = null, $localKey = null, $relationName = null)
{
    if (is_null($relationName))
        $relationName = $this->getRelationCaller();

    $primaryKey = $primaryKey ?: $this->getForeignKey();
    $localKey = $localKey ?: $this->getKeyName();
    $instance = new $related;

    return new HasMany($instance->newQuery(), $this, $instance->getTable().'.'.$primaryKey, $localKey, $relationName);
}

В моем случае переменная с именем $ related равна Bt / Shop / Models / ProductImages. Я распечатал его, чтобы убедиться.

Какие-либо предложения?


person clone45    schedule 08.08.2015    source источник
comment
Привет, Бен. Model.php, который я цитировал, поставляется с OctoberCMS. Я не писал этот Model.php.   -  person clone45    schedule 08.08.2015


Ответы (1)


Я решил это. Я использовал косую черту вместо обратной в определениях ownTo и hasMany:

Старый (сломанный):

public $belongsTo = [
    'products' => ['Bt/Shop/Models/Products']
];

Новые (рабочие):

public $belongsTo = [
    'products' => ['Bt\Shop\Models\Products']
];

Ура, Брет

person clone45    schedule 08.08.2015