Sử dụng Yii, làm cách nào tôi có thể lấy mảng từ Bản ghi Hoạt động.Yii - Cách lấy mảng giá trị từ Bản ghi Hoạt động
Nói cái gì đó như thế này:
array('foo', 'bar', 'lala')
Từ một cái gì đó như thế này:
MyTable::model()->findall()
Sử dụng Yii, làm cách nào tôi có thể lấy mảng từ Bản ghi Hoạt động.Yii - Cách lấy mảng giá trị từ Bản ghi Hoạt động
Nói cái gì đó như thế này:
array('foo', 'bar', 'lala')
Từ một cái gì đó như thế này:
MyTable::model()->findall()
Không sử dụng ActiveRecord. Sử dụng các lớp CDBCommand->queryColumn()
Meh ... Django có: https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list Tại sao Yii không thể có điều đó? – Marian
Nếu bạn đang sử dụng bất kỳ phương thức beforeFind hoặc afterFind nào cho ActiveRecord của bạn, điều này sẽ (rõ ràng) không gọi cho chúng. Ví dụ, tôi đã làm một số prefiltering trong một beforeFind mà không được gọi trong queryColumn, vì vậy chúng tôi đã nhận được kết quả nhiều hơn mong đợi. May mắn thay, chúng tôi đã có một số thử nghiệm tại chỗ để nắm bắt những thứ như thế này, nếu không điều này sẽ làm tổn thương chúng tôi xuống đường trong sản xuất. –
câu hỏi đặt ra là lấy dữ liệu thực tế ra khỏi MyTable :: model() -> findall(); Vì vậy, câu trả lời là không liên quan –
Nếu tôi hiểu bạn một cách chính xác:
$users = User::model()->findAll();
$usersArr = CHtml::listData($users, 'id' , 'name');
print_r($usersArr);
Nó sẽ cho bạn mảng id = > tên
Array {
2 => 'someone',
20 => 'kitty',
102 => 'Marian',
// ...
}
ActiveRecord có thuộc tính được gọi là thuộc tính. Bạn có thể tìm thấy mô tả của nó tại đây: http://www.yiiframework.com/doc/api/1.1/CActiveRecord#attributes-detail.
Để có được tất cả các thuộc tính trong một mảng, sử dụng này: $var = $model->attributes;
Bạn cũng có thể làm điều gì đó như
$countries = Country::model()->findAll();
array_values(CHtml::listData($countries, 'country_id', 'country_name'));
mà trả về một mảng của tất cả các tên quốc gia hoặc
array_keys(CHtml::listData($countries, 'country_id', 'country_name'));
trả về một mảng của tất cả các id quốc gia.
Sử dụng Chtml cho điều này là một Ugly Hack! Áp dụng giải pháp này là cách tốt hơn để này mà tôi tìm thấy:
public function queryAll($condition = '', $params = array())
{
$criteria = $this->getCommandBuilder()->createCriteria($condition, $params);
$this->applyScopes($criteria);
$command = $this->getCommandBuilder()->createFindCommand($this->getTableSchema(), $criteria);
$results = $command->queryAll();
return $results;
}
Bạn có thể thêm mã này vào một lớp ActiveRecord, ví dụ:
class ActiveRecord extends CActiveRecord {
//...
}
Và, sử dụng theo cách này:
return $model->queryAll($criteria);
Bạn có thể đọc thêm trong số this link.
Lưu ý rằng [câu trả lời chỉ có liên kết] (http://meta.stackoverflow.com/tags/link-only-answers/info) không được khuyến khích, các câu trả lời SO phải là điểm cuối của việc tìm kiếm giải pháp (so với nhưng một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra
Làm thế nào về:
Yii::app()->db->createCommand()
->setFetchMode(PDO::FETCH_COLUMN,0)
->select("mycolumn")
->from(MyModel::model()->tableSchema->name)
->queryAll();
Kết quả sẽ là:
array('foo', 'bar', 'lala')
Đối yii2, sử dụng:
yii\helpers\ArrayHelper::map(MyModel::find()->all(), 'id', 'name'));
hoặc
yii\helpers\ArrayHelper::getColumn(MyModel::find()->all(), 'name'));
nếu bạn đang sử dụng Yii1.1 và bạn cần nhận được TẤT CẢ dữ liệu từ AR dưới dạng mảng bạn cần quan tâm về nó. Yii1.1 AR không có tính năng này ra khỏi hộp
Trong Yii2 AR có asArray() phương pháp, nó rất hữu ích
Tôi hy vọng câu trả lời của tôi sẽ giúp người
Cung cấp một ví dụ có thể giúp tốt hơn một chút. –
Sử dụng Yii2 ArrayHelper bằng cách bao gồm để điều khiển của bạn này sẽ chuyển đổi dữ liệu mô hình thành một mảng được liên kết
use yii\helpers\ArrayHelper;
$post = ArrayHelper::toArray(ClientProfilesForm::findOne(['id' => 1]));
//or use it directly by
$post = yii\helpers\ArrayHelper::toArray(ClientProfilesForm::findOne(['id' => 1]));
foo, bar và lala là gì? thuộc tính của một bảng/mô hình hoặc các đối tượng mô hình khác nhau? –
là bạn đang cố gắng hỏi làm thế nào bạn có thể sử dụng điều kiện, params vv cho findAll chức năng? – Arfeen
Giá trị. Tôi muốn nhận được một mảng o giá trị từ một bảng. Ví dụ: một mảng các quốc gia nằm ngoài bảng chứa quốc gia. – Marian