Laravel query relationship with different connection not working

  Kiến thức lập trình

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?

LEAVE A COMMENT