Создание плагина OctoberCMS: проблемы со связями has-many — класс не найден

Я действительно изо всех сил пытаюсь заставить отношения OctoberCMS работать в плагине, который я пишу. У меня есть две таблицы: products и product_images. Между продуктами и 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 line
+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. Я распечатал это, чтобы быть уверенным.

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

0

Решение

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

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

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

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

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

Ура,
Брет

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]