zendframework/zend-db

SQL column alias bug

plasid opened this issue · 4 comments

....$select...->join('vendors', 'vendors.id = campaigns_vendors.vendor_id', ['vendor_id'=>'id', 'vendor_daily_limit'=>'daily_limit'], $select::JOIN_LEFT)

When I query this select object I get the following error: "Not a valid magic property for this object"
When I rename the column alias to anything else but 'vendor_daily_limit' the error goes away.
When I print the produced SQL and run it via phpMyadmin or Bench then the query executes perfectly.

Very bizarre error and no indication of what is causing it.

I have no luck to reproduce that error on my local env)

Could you please add more information, may be table structure or scope code ?)

you should can do something like this:

use Zend\Db\Sql\Predicate\Expression;

$select->join(
     'vendors', 
     'vendors.id = campaigns_vendors.vendor_id', 
     [
         'vendor_id'          => new Expression('vendors.id'),
         'vendor_daily_limit' => new Expression('vendors.daily_limit'),
      ],
      $select::JOIN_LEFT
);

It turns out I was looking at the wrong code.
The error "Not a valid magic property for this object" is produced when you call a non-existing method on the Sql object i.e. $sql->join(....)->equalTo(....) - equalTo is a method of Where and not Sql, since ZF uses overloading for this, the error message is not obvious.
A better message would be something like: "method equalTo not defined for Sql"

Sorry for wasting your time.

This repository has been closed and moved to laminas/laminas-db; a new issue has been opened at laminas/laminas-db#51.