Zendフレームワークで構築しているアプリケーションの「sellers」テーブルからデータを取得する必要がある、かなりユニークな条件と注文のセットがあります。
クライアントは基本的に、次のような非常に特定の順序で販売者をリストするディレクトリ ページのアプリケーションを要求しています。
- 過去 7 日間に承認された出品者 (その後、以下の #4 で注文)
- 次に、サイトのアップグレード機能の料金を支払い、7 日以上経過している売り手 (その後、以下の #4 で注文)
- 次に、7日以上経過している出品者と7日以上経過している出品者(その後、以下の#4で注文)
- 上記のすべてについて、第 2 の順序は発売日、次に企業名のアルファになります。
上記の正しい順序でデータを返すアクション ヘルパーを作成する最も効果的な方法を見つけようとしています。一部のビューは 1、2 (および 4) しか必要としないのに対し、アプリケーション内の他のビューは4つすべてが必要です。
現在、2 つまたは 3 つの個別のクエリを作成し、それらをビュー内の 2 または 3 に渡していpartialloop
ますが、適切に記述されたコードを目指しており、3 つのクエリを渡すことができる 1 つのオブジェクトに結合したいと考えています。 1 つの部分ループに、または.... 1 つのクエリを記述します。これはどのように行うことができますか?
現時点での私のヘルパーは次のとおりです。
class Plugin_Controller_Action_Helper_ListSellers extends Zend_Controller_Action_Helper_Abstract
{
//put your code here
public function direct($regulars = false, $filter = false)
{
$dateMod = $this->dateMod = new DateTime();
$dateMod->modify('-7 days');
$formattedDate = $dateMod->format('Y-m-d H:i:s');
// get sellers initialized in last 7 days
$sellerTable = new Application_Model_DbTable_Seller();
// get sellers initialized in last 7 days
$select = $sellerTable->select()->setIntegrityCheck(false);
$select->from(array('b' => 'seller'),array('sellerID', 'businessName','sellerPicture'));
// select firstName, lastName, picture from user table, and businessName and sellerID from seller table. All records from seller table
$select->join(array('u' => 'user'), 's.userID = u.userID', array('firstName', 'lastName'));
$select->order('s.launchDate DESC','s.businessName ASC');
$select->where('s.active = 1 AND s.contentApproval = 1 AND s.paymentApproval = 1');
$select->where('s.launchDate > ?', $formattedDate);
if($filter){ $select->where('s.categoryID = ?', $filter);}
$newSellers = $sellerTable->fetchAll($select);
$query = $sellerTable->select()->setIntegrityCheck(false);
$query->from(array('b' => 'seller'),array('sellerID', 'businessName','sellerPicture'));
// select firstName, lastName, picture from user table, and businessName and sellerID from seller table. All records from seller table
$query->join(array('u' => 'user'), 's.userID = u.userID', array('firstName', 'lastName'));
$query->order('s.launchDate DESC','s.businessName ASC');
$query->where('s.active = 1 AND s.contentApproval = 1 AND s.paymentApproval = 1 AND s.featured = 1');
$query->where('s.launchDate < ?', $formattedDate);
if($filter){ $select->where('s.categoryID = ?', $filter);}
$featuredSellers = $sellerTable->fetchAll($query);
if($regulars){
$where = $sellerTable->select()->setIntegrityCheck(false);
$where->from(array('b' => 'seller'),array('sellerID', 'businessName','sellerPicture'));
// select firstName, lastName, picture from user table, and businessName and sellerID from seller table. All records from seller table
$where->join(array('u' => 'user'), 's.userID = u.userID', array('firstName', 'lastName'));
$where->order('s.launchDate DESC','s.businessName ASC');
$where->where('s.active = 1 AND s.contentApproval = 1 AND s.paymentApproval = 1 AND s.featured IS NULL');
$where->where('s.launchDate < ?', $formattedDate);
$regularSellers = $sellerTable->fetchAll($where);
}
}
}