Skip to content

joinWith and with using onCondition has problem with eager or lazy #44

Open

Description

@gholizadeh

What steps will reproduce the problem?

I want select all failures with related job only if it has a reason on failure table and I use this

$failures = Failure::find()
        ->joinWith([
            'job' => function ($query) {
                $query->andOnCondition(['failure.reason' => 1]);
            }
])->all();

Error

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'failure.reason' in 'where clause'
SELECT * FROM job WHERE (job_id=2) AND (failure.reason=1)

Additional info

I have used (with) and (joinWith) also used (true and false) as second param to indicate eager or lazy and always get same error

Q A
Yii version 2.0

Activity

  1. gholizadeh commented on Mar 30, 2019

    @gholizadeh
    Author

    also I found svit-ws commented on a same issue 2 years ago.

  2. rob006 commented on Mar 30, 2019

    @rob006

    Is there any reason why you're not using:

    $failures = Failure::find()
            ->andWhere(['failure.reason' => 1])
            ->joinWith(['job'])
            ->all();

    ?

  3. gholizadeh commented on Mar 31, 2019

    @gholizadeh
    Author

    @rob006 because as I said I want all failures and the job (but I need the job only if failure has reason). it will gives the failures have reason not all failures

  4. gholizadeh commented on Mar 31, 2019

    @gholizadeh
    Author

    It would be grate if andOnCondition and OnCondition had another param that indicate the scope of condition (in join as a general condition or in joined table which is considered by default and really useful in most of the times)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions