Php 如何在Drupal8中创建查询
我习惯于在drupal 7中使用db_select,但现在在drupal 8中不推荐使用它 所以,如果我需要创建一个查询来列出Php 如何在Drupal8中创建查询,php,mysql,drupal,drupal-8,Php,Mysql,Drupal,Drupal 8,我习惯于在drupal 7中使用db_select,但现在在drupal 8中不推荐使用它 所以,如果我需要创建一个查询来列出users\u field\u data表中的所有用户,我应该怎么做 我是否仍然使用db\u select或db\u query,即使它们是不推荐使用的函数?或者创建一个新的控制器从“选择类”扩展并进行查询?取决于您试图实现的目标 使用存储对象 如果要对用户进行简单查询,则应使用存储对象的loadByProperties 使用实体查询&loadMultiple 如果需
users\u field\u data
表中的所有用户,我应该怎么做
我是否仍然使用
db\u select
或db\u query
,即使它们是不推荐使用的函数?或者创建一个新的控制器从“选择类”扩展并进行查询?取决于您试图实现的目标
使用存储对象
如果要对用户进行简单查询,则应使用存储对象的loadByProperties
使用实体查询&loadMultiple
如果需要更复杂的查询,包括排序、范围、寻呼机和/或条件组,则应使用实体查询
正如文档中提到的,您可以通过注入Drupal的数据库连接类来查询数据。例如:
use Drupal\Core\Database\Connection;
class DatabaseQueryExample {
protected $connection;
public function __construct(Connection $connection) {
$this->connection = $connection;
}
public function queryExamples() {
// db_query()
$this->connection->query(" ... ");
// db_select()
$this->connection->select(" ... ");
}
}
db\u选择
,db\u插入
,db\u更新
,等等。。。在Drupal8.0.x
中已弃用,将在Drupal9.0.0
中删除
相反,从容器中将数据库连接注入到服务中,并对其调用select()
。例如,$injected\u database->select($table,$alias,$options)代码>
例如:
我建议您将问题的措辞改为“如何在D8中进行查询”,因为它因基于意见而吸引选票。您想实现什么?谢谢您的评论!这很有帮助!问题:'t'
的两个实例是否都是您想要获取的行的名称?fields()接受多个参数,如果您使用->fields('t'),即仅提供1个参数,这是您定义为别名的参数,它将转换为“*”,您在编写SQL查询时将使用该参数获取所有字段。要获取一组字段,请从使用的表->字段('t',数组('a','b')中说出'a','b'
$ids = \Drupal::entityQuery('user')->condition('name', 'foo')->execute();
$users = User::loadMultiple($ids);
use Drupal\Core\Database\Connection;
class DatabaseQueryExample {
protected $connection;
public function __construct(Connection $connection) {
$this->connection = $connection;
}
public function queryExamples() {
// db_query()
$this->connection->query(" ... ");
// db_select()
$this->connection->select(" ... ");
}
}
$db = \Drupal::database();
$data = $db->select('table_name','t')->fields('t')->execute();
$db->insert();
$db->update();