Nano Hash - криптовалюты, майнинг, программирование

Yii - объединяйте таблицы в одну огромную таблицу и получайте прямой доступ ко всем столбцам

У меня проблема с объединением таблиц в одну огромную таблицу, чтобы все столбцы были доступны без вложенных FOR или использования в них отношений. Ситуация такая:

cars
========
id_producer (PK)
id_model (PK)
length
weight
...

texts
============
id_model (PK)
language (PK)
text
...

Таблицы разделяют 1 ключ: id_model

Я хочу присоединиться к этим таблицам следующим образом:

SELECT *
FROM cars c
JOIN texts t ON c.id_model = t.id_model
WHERE t.language = 'english'

.. он вернет 1 строку для каждой машины.

SQL легко, Yii нет :(

Я пытался сделать это, используя область действия или отношение, но так и не получил желаемого результата. Я хочу написать следующее:

$carsWithTexts = Cars::model()-> ... something ... ->findAll()

foreach ($carsWithTexts as $c)
{
    echo $c->id_producer;
    echo $c->id_model;
    echo $c->id_text;
}

.. Никаких вложенных FOR, никаких отношений или областей в FOR.

Это возможно? Или мне всегда нужно использовать следующую конструкцию:

$carsWithTexts = Cars::model()-> ... relation ... ->findAll()


foreach ($carsWithTexts as $c)
{
    echo $c->id_producer;
    echo $c->id_model;
    echo $c->relation[0]["id_text"]; // or nested for
}

Я знаю, что могу использовать команды «с» и «вместе», я это сделал, но это не сработало так, как я хочу.

02.05.2012

Ответы:


1

Yii не сложен, вам просто нужно прочитать документацию и применить их примеры, то, что вы хотите сделать, можно сделать так:

Я предполагаю, что вы сгенерировали код с помощью Gii, поэтому имя отношения (вы можете проверить его в классе Car) будет texts. Теперь у вас есть два способа сделать это, самый простой способ:

Cars::model()->with('texts')->findAll("texts.language = 'english'");

Это вернет все автомобили с текстовой информацией, где текст на английском языке. Я рекомендую вам прочитать Relational Active Record из официального руководства, чтобы узнать больше об этом.

И другой подход заключается в использовании CDbCommand для выполнения такой команды SQL:

$connection=Yii::app()->db;   // assuming you have configured a "db" connection
$command=$connection->createCommand();
$command->from('cars');
$command->join('texts', 't.id_model = texts.id_model');
$command->where('texts.language=:language', array(':id'=>'english'));
$rows=$command->queryAll();

Этот способ более удобен для SQL, но, как вы можете видеть, здесь гораздо больше строк PHP.

02.05.2012
  • Привет. Именно так я это и сделал, но в возвращаемом результате все еще есть вложенный массив. Чтобы получить тексты, мне нужно перебрать результат (это нормально), но в каждой записи есть еще один массив с текстами. Итак, я должен написать это: $car-›texts[0]-›text, чтобы получить текст. Это из-за типа отношения HAS_MANY? 03.05.2012
  • PS: я бы хотел написать только $car-›text = текстовый столбец будет добавлен (и доступен) как столбец в таблицу cars с помощью JOIN. 03.05.2012
  • PS2: Даже если я использую CdbCriteria и указываю разделы JOIN и CONDITION, я никогда не получаю желаемую форму результата = все на 1 строке. (Даже если отношение не используется!) 03.05.2012
  • Наконец, я сделал это, используя чистый SQL-запрос, как вы упомянули: $connection = Yii::app()-›db; $command = $connection->createCommand($sql); $results = $command-›queryAll(); 03.05.2012
  • Я рад, что это сработало :) попробуйте изучить отношения Yii. Это очень поможет вам в жизни. 03.05.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..