桌CakePHP视图与综合钥匙的

时间:2017-05-12 01:01:02

标签: php cakephp cakephp-3.0

我有一张表保存了。它有PKof用户和产品。对于每个登录的用户,我想查看(例如,savedItems / view / 23)他们购物车中的所有商品。

public function view($id = null)
    {
        $usersavedproduct = $this->saveditems->get($id, [
            'contain' => ['Products', 'Users']
        ]);

目前它只是变为null,因为它只输入用户ID。我该如何管理?

2 个答案:

答案 0 :(得分:0)

你可以使用类似的东西:

$articles = TableRegistry::get('Articles');
$article = $articles->get($id);
// Get a single article, and related comments
$article = $articles->get($id, [
    'contain' => ['Comments']
]);

使用find方法检索数据,因为它会为您提供所有数据,并且get会为您提供单行:

$this->saveditems->find()
   ->where(['id' => $id])

检查此文档: https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

答案 1 :(得分:0)

您应该以不同的方式使用您的联接表。如果您的saved_items表具有以下结构:id,user_id,product_id,则可以执行以下操作:

  1. 加入用户和产品表:
  2. 在UsersTable中:

    $this->belongsToMany('Products', [
            'joinTable' => 'saved_items',
        ]);
    

    在ProductsTable中:

    $this->belongsToMany('Users', [
            'joinTable' => 'saved_items',
        ]);
    
    1. 在UsersTable上执行查询,以查找包含其已保存产品的用户:

      $ user = $ this-> Users-> get($ id,[         'contains'=> [ '产品']     ]);

    2. 这将为您提供User实体,以及相关的Product实体。进一步阅读:https://book.cakephp.org/3.0/en/orm/associations.html