Мне нужно выбрать конкретный набор столбцов из обеих таблиц, используя Propel Orm 2.0.0. Эквивалентный запрос как ниже
select b.name as brand_name, b.grade, d.name as dealer_name, d.number
from brand as b join dealer as d
on d.id = b.dealer_id;
Я изо всех сил, где необходимые столбцы в обеих таблицах имеют одинаковое имя, но необходимо объединить с использованием другого столбца.
Помогите мне с кодом Propel php, а также с соответствующим сайтом ссылок. Документ на официальном сайте не является хорошим учебником.
Это должно работать, если вы правильно определили свои модели.
$rows = BrandQuery::create()
->select(['name', 'grade'])
->joinWith('dealer')
->withColumn('dealer.name', 'dealer_name')
->withColumn('dealer.number')
->find();
Вам нужно использовать ORM. При условии, что все модели настроены правильно:
<?php
$brands = BrandQuery::create()->find();
// $brands contains a collection of Brand objects
// one object for every row of the brand table
foreach($brands as $brand) {
$dealers = $brand->getDealers();
// $dealers contains a collection of Dealer objects for this brand
// one object for every row of the dealers table for brand row
}
Другой (и я думаю, что лучше) способ здесь будет использовать пользовательский SQL.
<?php
use Propel\Runtime\Propel;
$con = Propel::getWriteConnection(YOUR_DATABASE_NAME);
$sql = "select b.name as brand_name, b.grade, d.name as dealer_name, d.number from brand as b join dealer as d on d.id = b.dealer_id";
$stmt = $con->prepare($sql);
$stmt->execute();