2015-06-26 2 views
1

Я хочу использовать условие внутри запроса поставщика данных SQL, как показано нижеИспользуя условия внутри поставщика данных SQL

$count   = Yii::$app->db->createCommand(' 
        SELECT COUNT(*) FROM screen_ticket_booking WHERE id!=:id 
        ', [':id' => 0])->queryScalar(); 
        $dataProvider = new SqlDataProvider([ 
        'sql' => 'SELECT A1.booking_id As Booking_id, 
           A3.movie_name As Movie, 
           A4.theatre_name As Theatre, 
           A1.show_date As Show_date, 
           A2.start_time As Time, 
           A5.booking_date As Booking_date, 
           A1.id As Id 

           FROM 
           screen_ticket_booking A1 

           LEFT OUTER JOIN screen_show_times A2 ON A1.show_time_id=A2.id 
           LEFT OUTER JOIN movies A3 ON A1.movie_id=A3.id 
           LEFT OUTER JOIN theatres A4 ON A1.theatre_id=A4.id 
           LEFT OUTER JOIN screen_ticket_booking_history A5 ON A1.booking_id=A5.booking_id 

           WHERE A1.id !=0 ', 
        if($userid != '1') 
        { 
        $sql .= ' AND A4.users_backend_id = {$userid}'; 
        } 
        'totalCount' => $count, 
        ]); 

я получаю ошибку "ошибка синтаксиса, неожиданный„если“(T_IF), ожидая„]“ " . невозможно ли использовать условие внутри поставщика данных SQL?

ответ

3

Если вы хотите использовать условия для составления запроса, вам необходимо сделать это за пределами dataprovider. Как это:

$sql = 'SELECT A1.booking_id As Booking_id, 
    A3.movie_name As Movie, 
    A4.theatre_name As Theatre, 
    A1.show_date As Show_date, 
    A2.start_time As Time, 
    A5.booking_date As Booking_date, 
    A1.id As Id 

    FROM 
    screen_ticket_booking A1 

    LEFT OUTER JOIN screen_show_times A2 ON A1.show_time_id=A2.id 
    LEFT OUTER JOIN movies A3 ON A1.movie_id=A3.id 
    LEFT OUTER JOIN theatres A4 ON A1.theatre_id=A4.id 
    LEFT OUTER JOIN screen_ticket_booking_history A5 ON A1.booking_id=A5.booking_id 

    WHERE A1.id !=0 ' 

if($userid != '1') 
{ 
    $sql .= ' AND A4.users_backend_id = {$userid}'; 
} 

И затем $dataProvider = new SqlDataProvider([ 'sql' => $sql, 'totalCount' => $count, ]);

Также рассмотреть использование query builder, который обеспечивает более гибкий и не зависит от СУБД способа создания ВЫБРАТЬ операторы SQL

Смежные вопросы