Я действительно изо всех сил пытаюсь заставить отношения 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. Я распечатал это, чтобы быть уверенным.
Какие-либо предложения?
Я решил это. Я использовал прямые косые черты вместо обратных косых черт в определениях ownTo и hasMany:
Старый (сломанный):
public $belongsTo = [
'products' => ['Bt/Shop/Models/Products']
];
Новый (рабочий):
public $belongsTo = [
'products' => ['Bt\Shop\Models\Products']
];
Ура,
Брет
Других решений пока нет …