I’m using Laravel 11, Oracle Database for my project. I have some models:
class Order extends Eloquent
{
use HasFactory;
protected $connection = 'db_order';
protected $table = 'orders';
public function event()
{
return $this->belongsTo(Event::class, 'event_id', 'id');
}
}
class Event extends Eloquent
{
use HasFactory;
protected $connection = 'db_event';
protected $table = 'events';
public function orders()
{
return $this->hasMany(Order::class);
}
}
I want to query list orders with search by Event name. This is my query:
$query = Order::with('event');
if (isset($request->name_search)) {
$searchText = "'%".trim($request->name_search)."%'";
$query->where('id', 'like', $searchText)
->orWhere('transaction_id', 'like', $searchText)
->orWhere('user_id', 'like', $searchText)
->orWhere('customer_name', 'like', $searchText)
->orWhereHas('event', function($q) use ($searchText) {
$q->where('name', 'like', $searchText);
});
}
}
$orders = $query->orderBy('orders.id', 'DESC')->paginate(20);
But i got error:
Error Code : 942 Error Message : ORA-00942: table or view does not exist Position : 166 Statement : select count(*) as aggregate from “ORDERS” where “ID” like :p0 or “TRANSACTION_ID” like :p1 or “USER_ID” like :p2 or “CUSTOMER_NAME” like :p3 or exists (select * from “EVENTS” where “ORDERS”.”EVENT_ID” = “EVENTS”.”ID” and “NAME” like :p4) Bindings : [‘%abc%’,’%abc%’,’%abc%’,’%abc%’,’%abc%’]
SELECT
count(*) AS aggregate
FROM
"ORDERS"
WHERE
"ID" LIKE '%abc%'
OR "TRANSACTION_ID" LIKE '%abc%'
OR "USER_ID" LIKE '%abc%'
OR "CUSTOMER_NAME" LIKE '%abc%'
OR EXISTS (
SELECT
*
FROM
"EVENTS"
WHERE
"ORDERS"."EVENT_ID" = "EVENTS"."ID"
AND "NAME" LIKE '%abc%'
)
How can it fix it?