1

zf2でカスタムクエリを実行したい。これで、アルバムコントローラーとAlbumTableができました。AlbumTable内で、結合操作を実行したいと思います。しかし、私はこれを行うことができません。私にいくつかの提案をお願いします。

私のコードの下:

namespace WebApp\Table;

use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Sql\Sql;

new Zend\Db\Adapter\Adapter;

class UserTable
{

   protected $tableGateway;

   public function __construct(TableGateway $tableGateway)
   {
       $this->tableGateway = $tableGateway;
   }

   public function searchUser($search)
   {

    $search    = "mehedi";
    $adapter   = new Adapter();
    $sql       = new Sql($adapter);
    $select    = $sql->select();
    $select->from('foo');
    $select->join('profiles', 'user.user_id = profiles.ownerId', array('name'));
    $select->where(array('id' => 2));
    $statement = $sql->prepareStatementForSqlObject($select);
    $results   = $statement->execute();
    return $results;
   }

}
4

3 に答える 3

1

問題は、少なくともドライバーが必要な場合に、パラメーターなしでアダプターをインスタンス化しようとしていることです。

 $adapter   = new Adapter(); // Bad
 $adapter   = new Adapter($driver); // ..

アダプターを入手するにはServiceManagerを使用する必要がありますが、Skeletonアプリケーションから始めましたか?

すでにTableGatewayに挿入されているはずです。

$adapter = $this->getAdapter();

アダプタのインスタンス化の例:

$config = $serviceLocator->get('Config');
$adapter = new Adapter($config['db']);

構成内でセットアップを指定する場合、local.phpは次のことを行います。

return array(
    /**
     * Database Config
     */
    'db' => array(
        'driver'    => 'pdo',
        'dsn'       => 'mysql:dbname=dbname;host=localhost',
        'username'  => 'root',
        'password'  => 'password',
    ),
于 2013-03-06T09:51:48.513 に答える
1

私はここのすべてを助けることでこの問題のいくつかの解決策を得ました。

    $adapter = $this->tableGateway->getAdapter();

   /* $adapter variable is used to fetch Adapter 
   configuration from serivce manager. */

    $sql       = new Sql($adapter);
    $select    = $sql->select();
    $select->from('foo');
    $select->join('profile', 'foo.skillId = profile.id', array('name'));

    $statement = $sql->prepareStatementForSqlObject($select);
    $results   = $statement->execute();

   /* if you want you can see your
   desired output in here. */

    foreach ($results as $person) {
        echo "<pre>";
        print_r($person);
    }

    return $results;
于 2013-03-11T10:03:40.383 に答える
0

これは、joinメソッドが結合テーブルの配列を予期しているためです。また、私は個人的に次のようにクエリのテーブルにプレフィックスを付けます:-

 $search    = "mehedi";
 $adapter   = new Adapter();
 $sql       = new Sql($adapter);
 $select    = $sql->select();
 // PREFIXED THE foo table f
 $select->from(array('f' =>'foo'));
 // PREFIXED THE profiles table p 
 $select->join(array('p' => 'profiles'), 'user.user_id = profiles.ownerId', array('name'));
 $select->where(array('id' => 2));
 $statement = $sql->prepareStatementForSqlObject($select);
 $results   = $statement->execute();
 return $results;
于 2013-03-05T11:17:50.627 に答える