Comments (3)
You can use so code for quote:
$quotedJoinColumn = $quoter->quoteColumnName($tableName . '.name');
quoteColumnName()
supports column names with table.
And simpler way will be so:
use Yiisoft\Db\Connection\ConnectionInterface;
use Yiisoft\Db\Expression\Expression;
use Yiisoft\Db\Query\Query;
/**
* @var ConnectionInterface $database
* @var string $tableName
* @var string $childrenTableName
*/
$quoter = $database->getQuoter();
$quotedJoinColumn = $quoter->quoteColumnName($tableName . '.name');
$rawItems = (new Query($database))
->select($tableName . '.*')
->from($tableName)
->leftJoin(
$childrenTableName,
[$childrenTableName . '.child' => new Expression($quotedJoinColumn) ]
)
->all();
from db.
This could be done by one of the following ways:
-
By default for
...Join()
methods process condition of associative array as"column name" => "column name"
,
e.g.['parent.id' => 'child.parent_id']
quote key and value of the associative array as column names.
UseExpression
or parameters if need to pass value (not "column name"),
e.g.['parent.id' => 'child.parent_id', 'child.has_parent' => new Expression('1'), 'child.has_parent' => ':param']
-
Add one more condition type, e.g.
column
:['column', 'parent.id' => 'child.parent_id']
and quote key and value as column names.
This condition can be used in other places (not only in...Join()
),
e.g.->where(['column', 'parent.id' => 'child.parent_id'])
-
Add specific class of
ExpressionInstance
e.g.ColumnName
:['parent.id' => new ColumnName('child.parent_id')]
and quote it as column name. It also can be used in other palces (where()
,having()
, etc)
Also there is way
->leftJoin('child', ['parent.id' => new Expression('{{child}}.[[parent_id]]')])
from db.
In current implementation to $on
bind params and used result string. And this OK for me, $on
is not so often be a column name.
3th way from @Tigrov looks fine solution for this case.
from db.
Related Issues (20)
- Changes before release 2.0.0
- Allow use `DMLQueryBuilderInterface::batchInsert()` without `$columns` HOT 4
- Add posibility to drop table `IF EXISTS` and `CASCADE`
- Allow pass `ExpressionInterface` as alias to `QueryPartsInterface::withQuery()` HOT 1
- No usage of `AbstractCommand::requireTransaction()` HOT 3
- Needs to refactor `getRawSql()`
- Bug in `Command::insertWithReturningPks()` with empty values
- `Command::upsertWithReturningPks()` required for `ActiveRecord::upsert()`
- update irc link
- Bug when try to `Command::update()` using `Expression`s in values or in where condition
- Add ability to create like condition as `%value`, `value%` and `value` without `%`
- Add new method `SchemaInterface::getUserDefinedTypes()`
- Add ability to create `SELECT` with `FOR UPDATE`
- Refactoring of `DbArrayHelper`
- Needs to refactor `Query::each()`
- Changes after release 2.0.0
- Fix `float` type in `AbstractCommand::getRawSql()`
- Changes before release 3.0.0
- Add `hasTable()` shortcut HOT 1
- In `QueryInterface::scalar()` result no different between value `false` and no results HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from db.