Custom filtering

Is it possible to define custom filter that does not filter out specific rows? I’ve orderlocked - field in the database and all rows that have value 1 for this I would like to show on the GridView even if it would be otherwise filtered out. Thanks.

What does your Query/DataProvider code look like at the moment?

Almost the same as it comes with basic-configuration, haven’t tweaked that much. Something specific you want to know?

You could do something like




$query->orWhere(['orderlocked' => 1])



Thanks but this creates WHERE (orderlocked=1) AND statement to the query and will show only the mentioned rows. How to create OR statement?

That’s odd. The documentation clearly states

http://www.yiiframework.com/doc-2.0/yii-db-querytrait.html#orWhere()-detail

I’ve found that the order in which you place ->*Where() statements matters. I use


        $announceModel = Announcement::find()

                ->where(['>=', 'end_date', time()])

                ->orWhere('end_date IS NULL')

                ->andWhere(['<=', 'start_date', time()])

                ->orderBy('start_date DESC')

                ->all();



This gives me every announcement that the ‘start_date’ has passed AND ‘end_date’ has not come OR ‘end_date’ is NULL (No End Date).

It took awhile to get the order of where() clauses in the right order.

Still having problems with ->select() of a field from a ->joinWith() relation. :(

Indeed, it’s odd. Perhaps the order means something here, I don’t know. I’ve spent now quite some trying to fix this issue.

This works (finally):




if ($query->where)

{

	$query->orFilterWhere(['=', 'orders.orderlocked', 1]);

}