namespace app\controllers; use app\models\Func; use app\models\Worker; use Yii; use app\models\WorkerObject; use app\models\WorkerFunction; class AlgorithmAmicumController extends \yii\web\Controller { var $worker_id = 530; public function actionIndex() { // $this->runFileScript($this->buildScriptArray($this->worker_id)); $this->returnCache(); $cache = Yii::$app->cache; //ΠΈΠ½ΠΈΡΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ cache $dataProvider = json_decode($cache->get('scripts')); //Π·Π°Π±ΠΈΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· cache return $this->render('index', [ 'dataProvider' => $dataProvider, ]); } /*ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ scripts ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ Func*/ public function buildScriptArray($workerId){ $workerObjects = WorkerObject::findAll(['worker_id' => $workerId]); $scripts = array(); foreach($workerObjects as $workerObject){ $scripts[$workerObject->id]['worker_object_id'] = $workerObject->id; foreach ($workerObject->workerFunctions as $workerFunction) { $scripts[$workerObject->id]['worker_object_id'][$workerFunction->id]['worker_function_id'] = $workerFunction->id; foreach ($workerFunction->function as $function) { $scripts[$workerObject->id]['worker_object_id'][$workerFunction->id]['worker_function_id'][$function->id]['function_id'] = $function->id; } } } return $scripts; } public function returnCache() { $cache = Yii::$app->cache; //ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ cache $forCache = $this->buildScriptArray($this->worker_id); //ΡΠ»ΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ $cache->set('scripts', json_encode($forCache)); //ΠΎΡΠ΄Π°Π΅ΠΌ Π²ΡΠ΅ Π² cache } gives the error Cannot use a variable
in php storm, for some reason in the foreach fragment ($ workerObject-> workerFunctions as $ workerFunction) workerFunctions does not define as part of a variable and highlights it with a different color and use app \ models \ WorkerFunction; shown as not used.
in models here are such connections
public function getWorkerObject() { return $this->hasOne(WorkerObject::className(), ['id' => 'worker_object_id']); } public function getWorkerFunctions() { return $this->hasMany(WorkerFunction::className(), ['worker_object_id' => 'id']); } above is written incorrectly. error fixed below
public function buildScriptArray($workerId){ $workerObjects = WorkerObject::findAll(['worker_id' => $workerId]); $scripts = array(); foreach($workerObjects as $workerObject){ $scripts[$workerObject->id]['worker_object_id'] = $workerObject->id; foreach ($workerObject->workerFunctions as $workerFunction) { $scripts[$workerObject->id]['worker_object'][$workerFunction->id]['worker_function_id'] = $workerFunction->id; foreach ($workerFunction->function as $function) { $scripts[$workerObject->id]['worker_object'][$workerFunction->id]['worker_function'][$function->id]['function_id'] = $function->id; } } }