【问题标题】:CodeIgniter 4 Models->find()CodeIgniter 4 模型->find()
【发布时间】:2020-09-29 08:57:36
【问题描述】:

如果这个问题之前已经问过,我很抱歉,

所以我想做的是从我的模型中得到这样的结果

$data = $userModel->where('username', 'myname')->find();

我的期望:

$data = [
  'id' => 1,
  'username' => 'myname',
  'fullname' => 'my full name',
]

我得到了什么:

$data = [
  0 => [
    'id' => 1,
    'username' => 'myname',
    'fullname' => 'my full name',
  ]
]

来自docs here,它确实返回单行作为结果,但是当我想使用数组的值时,我需要这样输入:

$data[0]['username']

而不是这样:

$data['username']

当我在没有“where”条件的情况下这样做时,它确实按预期工作:

$data = $userModel->find(1);

但是当我想使用“用户名”值进行搜索时,就会出现问题。 然后我像这样尝试了它,当然它不起作用(返回null):

$data = $userModel->find('username', 'myname');

任何指针都会非常感谢,谢谢。

【问题讨论】:

  • 如果你想要搜索引擎,你应该改变你的查询,find 函数的工作方式是这样的.这样您的查询对于您的预期输出是错误的
  • 啊,我明白了.. 谢谢@NurbekBoymurodov 的解释

标签: php codeigniter-4


【解决方案1】:

通常当您想要多个结果时,您应该使用 ->findAll()。当您只想要一个结果时,最好使用 ->first();

如果您只想通过主键找到一条记录,则主要是查找。

$user = $userModel->find($user_id);

但是,在示例中,您显示您没有传递主键,因此它会假定您想要多个结果,因此需要您的数组。

为了确保您只得到一个结果并具有您想要的结构,我会使用:

$data = $userModel->where('username', 'myname')->first();

如果传递了主键,则查找 = 一行;如果使用其他键,则查找 = 多行

findAll = 始终假定返回结果数组

first = 总是假设返回一行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 2020-09-26
    • 2021-03-06
    • 2020-09-17
    • 2021-11-16
    • 1970-01-01
    相关资源
    最近更新 更多