在 prestashop 网络服务的其余 api 中添加新的 table

Adding new table in rest api of prestashop webservice

我已经成功地在 prestashop 产品 table 到 rest api 中创建了一个额外的 table的 webservice ,但是 api link http://127.0.0.1/prestashop/api/wb3d/1 wb3d 是我在 webservice 中创建的新 table .其中包含网络上某处图像目录的路径。 link 打开时显示已保存在数据库中的数据,如下图所示

model 是网络上的目录名称,因此此 api(wb3d) 已与 产品关联 table 在网络服务中 link:http://127.0.0.1/prestashop/api/products/1 当我打开这个 link 时。显示了协会的入口但没有显示数据**参考下图**

突出显示的区域显示了与产品 table 相关的 wb3d table throught rest api 的 webservice 。我无法将 wb3d 故事数据与产品 table 数据相关联。这样我就可以通过webservice在其他设备上使用了

这是我目前尝试过的方法

    <?php
class ProductMergeCore extends ObjectModel

{  
    public $product_id;
    public $id_wb3d;
    public $directory_name;
    public static $definition = array(
    'table' => 'wb3d',
    'primary' => 'id_wb3d',
    'fields' => array(
    'id_wb3d' => array('type' => self::TYPE_INT,  'required' => true),
    'product_id' => array('type' => self::TYPE_INT, 'required' => true),
    'directory_name' => array('type' => self::TYPE_STRING,  'required' =>false, 'size' => 64),
     ),
     );
    protected $webserviceParameters = array();
    }
    ?>

productmerge.php 负责在产品 table.

中创建关联 table 条目
 <?php 

  Class Product extends ProductCore

  {

   public $extrafield;



public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)

 {


    $this->webserviceParameters['associations']['wb3d'] = array('resource'    => 'wb3d','fields' => array('directory_name' => array('required' => true)));

    parent::__construct($id_product, $full, $id_lang, $id_shop, $context);

 }

}
?>

在此 product.php 中用于覆盖 产品 class 用于传递 额外参数通过webserviceparameters(),然后调用产品的父构造函数class

    <?php
    class WebserviceRequest extends WebserviceRequestCore
    {
    public static function getResources()
    {
    $resources=parent::getResources();
    $resources['wb3d'] = array('description' => 'images path', 'class' =>   'ProductMerge');
    ksort($resources);
    return $resources;
    }
    }
    ?>

WebserviceRequest.php class 是 WebserviceRequest class 的覆盖 class,它显示了 table 网络服务中的条目

这些是完成任务所需的文件。 我想要实现的是关联的 table (wb3d) 数据应该在产品 table 中通过 webservice rest api 调用 可用。

如果您想添加其他网络服务 table 作为您与产品的关联,您可以在 category.php 中查看关联是如何完成的位于 prestashop/classes.

'associations' => array(
     'categories' => array('getter' => 'getChildrenWs', 'resource' => 'category', )         
)

如您所见,有一个名为 getter 的参数,它从 getChildrenWs 这是 category.php 中的一个方法,它从数据库中获取数据。

所以在你的情况下:在 Product.php

$this->webserviceParameters['associations']['wb3d'] = array('resource' => 'wb3d',
                                                            'getter' => 'yourMethodName',
                                                            'fields' => array('directory_name' => array('required' => true));

并在 Product.php

中创建名为“yourMethodName”的方法
public function yourMethodName()
{
  //copy the getChildrenWs method which is in Category.php  and alter it to ur needs
}