У меня есть действие, которое выполняет простой запрос findOne($id) и возвращает одну строку из базы данных. Это превышает максимальное время выполнения. Этот метод наследуется несколькими классами, где он отлично работает. Я не переопределяю какие-либо методы find()
или afterFind()
в соответствующей модели.
public function actionGetone($id)
{
$classname = $this->model;
$model = new $classname;
return $model::findOne($id);
}
Я не получаю никаких ошибок и работаю, как ожидалось, если я переопределяю метод с помощью:
public function actionGetone($id){
$items = Job::find()->where(['id' => $id])->all();
return $items;
}
но как только я меняю его, чтобы вернуть return $items[0];
id снова умирает с той же ошибкой Exceeded.
Не уверен, что это связано, но я получаю ошибку Maximum execution time of 30 seconds exceeded
, когда действие не упоминается в методе behaviours()
и когда оно добавляется в правило доступа, как показано ниже. Но это дает мне ошибку Call to a member function checkAccess() on null
, когда я меняю роль доступа на ['*']. У меня нет настройки authManager.
public function behaviors()
{
return [
'contentNegotiator' => [
'class' => \yii\filters\ContentNegotiator::className(),
'formats' => [
'application/json' => yii\web\Response::FORMAT_JSON,
],
],
'authenticator' => [
'class' => \yii\filters\auth\HttpBearerAuth::className(),
'only' => [ 'delete','patch','getone'],
],
'access' => [
'class' => \yii\filters\AccessControl::className(),
'only' => ['delete','patch','getone'],
'rules' => [
[
'actions' => ['delete','patch','getone'],
'allow' => true,
'roles' => ['@'],
],
],
]
];
}
Буду признателен за любые идеи :)
Обновить
$items = Job::find()->where(['id' => $id]);
return $items;
Дает:
{
"sql": null,
"on": null,
"joinWith": null,
"select": null,
"selectOption": null,
"distinct": null,
"from": null,
"groupBy": null,
"join": null,
"having": null,
"union": null,
"params": [],
"where": {
"id": "3"
},
"limit": null,
"offset": null,
"orderBy": null,
"indexBy": null,
"modelClass": "common\models\Job",
"with": null,
"asArray": null,
"multiple": null,
"primaryModel": null,
"link": null,
"via": null,
"inverseOf": null
}
id
первичным ключом? Если нет, то индексируется ли он? Сколько у вас рядов? Если вы распечатаете SQL и вставите его прямо в свою БД, он будет работать нормально? Пробовали ли вы распечатать запрос с помощьюprint_r
перед использованием->all()
? - person h2ooooooo   schedule 29.02.2016var_dump($model->primaryKey()) ;
дает мне[0=>'id']
- person JPickup   schedule 29.02.2016return [$items[0]]
(возможно, он снова вызывает метод, если получает не массив, и поэтому он работает с массивом? - person h2ooooooo   schedule 29.02.2016