0

私が書いているプラ​​グインでOctoberCMSの関係を機能させるのに本当に苦労しています。products と product_images の 2 つのテーブルがあります。products と product_images の間には 1 対多の関係があります。

私の製品モデルには、次のものがあります。

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

plugins/bt/shop/models/ProductImages.php に ProductImages というモデルがあります。モデルは次のように定義されます。

<?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 と同じです。念のため印刷しました。

助言がありますか?

4

1 に答える 1

2

私はそれを解決しました。私は、begsTo と hasMany の定義でバック スラッシュの代わりにスラッシュを使用していました。

古い (壊れた):

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

新規 (作業中):

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

乾杯、ブレット

于 2015-08-08T21:01:42.973 に答える