Задать вопрос
Ответы пользователя по тегу MySQL
  • YII2 Сложный запрос с выборкой?

    bagiroff777
    @bagiroff777
    Веб-разработчик
    Может, попробуете relations Yii2?
    В модели продуктов можно прописать связь (Relation) через связующую таблицу:
    // Устанавливаем связь модели "Recipes" (Рецепты) с моделью "Products" (Продукты) с помощью связующей таблицы "recipes_products":
        public function getProducts(){
            // hasMany() устанавливает "множественную" связь, т.е. один ко многим.
            return $this->hasMany(Products::className(), ['id' => 'product_id'])->viaTable('recipes_products', ['recipe_id' => 'id']);
        }


    А в модели поиска просто:
    public function search($params)
        {
            $query = Recipes::find();
    
            $dataProvider = new ActiveDataProvider([
                'query' => $query,
            ]);
    
            $this->load($params);
    
            if (!$this->validate()) {
            // Не возвращаем ничего в случае, если валидация не прошла
                // $query->where('0=1');
    
                return $dataProvider;
            }
    
            // Аналогично LEFT JOIN, только немного иное.
            $query->joinWith('products');
    
            $query->andFilterWhere(['NOT IN', 'recipes_products.product_id'/* связующая таблица */, $this->product_exclude/* массив id исключаемых продуктов */]);
    
    // Здесь добавляем другие необходимые параметры поиска, например : $query->andFilterWhere(['products.id' => $this->product_id]);
    
            return $dataProvider;
        }


    Но, кажется, я вас не полностью понял
    Ответ написан
    Комментировать
  • Как запустить хранимую процедуру MySQL в PHP, и не дожидаться ответа?

    bagiroff777
    @bagiroff777
    Веб-разработчик
    php.net/manual/ru/function.pcntl-fork.php
    Возможно, поможет. Делаю так отправку всяких подтверждений по email и прочее.
    Но: выполнение задачи лучше выделять в отдельную функцию, затем exit();
    Например:
    $pid = pcntl_fork();
    if ($pid == -1) {
         die('Нельзя создавать дочерние процессы');
    } else if ($pid) {
         pcntl_wait($status);
    } else {
        // Наш код
        $this->sendEmail();
        exit(0);
    }
    Ответ написан
    Комментировать