douzong7283 2015-08-08 19:31
浏览 52
已采纳

OctoberCMS插件创作:有很多关系的问题 - 找不到类

I'm really struggling to get OctoberCMS relationships to work in a plugin that I'm writing. I have two tables: products and product_images. There is a one-to-many relationship between products and product_images.

In my products model, I have:

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

I have a model called ProductImages located in plugins/bt/shop/models/ProductImages.php. The model is defined as:

<?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']
    ];

    ...

And the definition of my Products model looks like this:

<?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']
    ];

The error that I'm getting is:

Class 'ProductImages' not found

/var/www/mysite/public/vendor/october/rain/src/Database/Model.php line 772

I believe that when the Product hasMany relationship is being defined, somehow the code does not know about the ProductImages class. The code in Model.php, line 772 is:

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);
}

In my case, the variable named $related is equal to Bt/Shop/Models/ProductImages. I printed it out to be sure.

Any suggestions?

  • 写回答

1条回答 默认 最新

  • dongsuoxi1790 2015-08-08 21:01
    关注

    I solved it. I was using forward slashes instead of back slashes in my belongsTo and hasMany definitions:

    Old (broken):

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

    New (working):

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

    Cheers, Bret

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值