codeigniter getWhere()必须是int或null类型,还有1个问题CI4

jmp7cifd  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(116)

请帮我拿一下CI 4。
这是在CI 4-〉ItemsCatModel.php中的模型

public function get_items_cat() {
   $builder = $this->table('items_category');
   $query = $this->table('items_category')->orderBy('items_cat_id', 'asc')->getWhere($this->table, array(['items_flag' => 1], ['items_cat_id !=' => 6]));
   return $query->getResultArray();
}

public function get_items_cat_bi($id) {
   $query = $this->query("SELECT * FROM items_category WHERE items_cat_flag = 1 AND items_cat_id <> ' . $id . ' ORDER BY items_cat_id ASC");
   return $query->getResultArray();
    }

当我使用get_items_cat时,这是指向array()的错误****传递给CodeIgniter\Database\BaseBuilder::getWhere()的参数2必须是int或null类型,指定数组
我也试过这个查询..question-〉它和上面的查询是同一个查询还是不同的?

$query = $this->query("SELECT * FROM items_category WHERE items_cat_flag = 1 AND items_cat_id <> 6 ORDER BY items_cat_id ASC");

如果答案是肯定的,那么上面的查询运行良好。
但是如果我使用上面的查询
*,当我运行我的控制器时,它失败了。
这是控制器-〉Home.php

public function __construct() {
   $this->bannersModel = new BannersModel();
   $this->itemsModel = new ItemsModel();
   $this->itemsCatModel = new ItemsCatModel();
}

public function index() {
   $data['items'] = $this->itemsModel->get_items();
   $data['items_lain'] = $this->itemsModel->get_items_lain();

   $i = 0;
   foreach ($data['item'] as $key => $value) {
      $category = $this->itemsCatModel->get_items_cat_bi($value['items_cat_id']);
      $data['items'][$i]['category'] = $category;
   }
   $i++;
}

错误如下所示不能将stdClass类型的对象用作数组这是错误开始**$category = $this->itemsCatModel->get_items_cat_bi($value['items_cat_id']);**
请你帮我解决这个问题,谢谢!

7bsow1i6

7bsow1i61#

解释:

第一部分:
所有用户域模型扩展的\CodeIgniter\Model没有内置的table(...)方法。因此,您的自定义get_items_cat()方法中的以下代码行应该抛出了错误。
$builder = $this->table('items_category');
我想,您应该使用$builder = $this->db->table('items_category');来代替。
第二部分:
$builder->getWhere()

  • get()方法相同,不同之处在于它允许您在第一个参数中添加“where”子句,而不是使用$builder->where()方法:

getWhere

  • 允许直接添加where子句、限制和偏移量。
public function getWhere(
    $where = null,
    ?int $limit = null,
    ?int $offset = 0,
    bool $reset = true
)

根据上面的参考,所讨论的方法需要一个$limit,它是一个intnull。然而,你却输入了一个数组(array(['items_flag' => 1], ['items_cat_id !=' => 6]))。

解决方案:

不要在第二个参数中传递WHERE条件,而是在第一个参数中传递。例如:

// ...

$query = $this->db
    ->table('items_category')
    ->orderBy('items_cat_id', 'ASC')
    ->getWhere(
        [
            ['items_cat_flag =' => 1],
            ['items_cat_id !=' => 6]
        ]
    );

// ...
附录

看起来index()自定义方法中的foreach循环也是错误的。

public function index() {
   $data['items'] = $this->itemsModel->get_items();
   // ...

   $i = 0;
   foreach ($data['item'] as $key => $value) {
      // ...
   }
   $i++;
}

我很怀疑你是想把代码行$i++;放在foreach循环中,否则$i将 * 总是 * 被设置为0
第二,你倾向于在$data['item']中循环,而你的初始声明引用了$data['items']。注意单词 'item' 的复数形式中的差异

相关问题