2016-11-27 1 views
1

Ich versuche, eine Suchanfrage zu machen, die in Diensten Titel, Beschreibungen und Firmennamen (Unternehmen hat Dienstleistungen, wenn Firmenname übereinstimmt, gibt es die Dienste zurück).Laravel Suchabfrage

Ich habe ein Suchfeld, das an meine Steuerung weitergegeben wird. Ich habe es so versucht:

$query = Service::select('id','company_id','title','description',price); 
$search = $request->input('search',null); 
$query = is_null($search) ? $query : $query->where('title','LIKE','%'.$search.'%')->orWhere('description','LIKE','%'.$search.'%')->orWhereHas('company', function ($q) use ($search) 
    { 
     $q->where('name','LIKE','%'.$search.'%')->get(); 
    }); 


$services= $query->paginate(5); 

Aber ich erhalte eine Fehlermeldung, dass Unbekannte Spalte 'services.company_id' in 'where clause' (SQL: select * from companies wo servicescompany_id = companiesid und name.. LIKE% xx% und companies. deleted_at ist null)

Wie soll ich diese Suche durchführen?

Danke!

Update:

class Service extends Model 
{ 
use SoftDeletes; 

protected $dates = ['deleted_at']; 

public function company() { 

    return $this->belongsTo('Company'); 

} 
} 

class Company extends Model 
{ 
    use SoftDeletes; 

    protected $dates = ['deleted_at']; 

    public function services() { 
    return $this->hasMany('Service'); 
} 
} 

Schema::create('services', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('company_id'); 
     $table->integer('service_category_id'); 
     $table->integer('server_id'); 
     $table->string('title'); 
     $table->string('description'); 
     $table->string('icon'); 
     $table->boolean('accepts_swaps'); 
     $table->integer('qty_available'); 
     $table->double('price_usd', 10, 6); 
     $table->timestamps(); 
     $table->softDeletes(); 
    }); 

Schema::create('companies', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('owner_id'); 
     $table->string('name'); 
     $table->string('email'); 
     $table->string('paypal_email')->nullable(); 
     $table->string('skrill_email')->nullable(); 
     $table->string('contact_email')->nullable(); 
     $table->string('phone')->nullable(); 
     $table->integer('city_id')->nullable(); 
     $table->string('short_description')->nullable(); 
     $table->text('description')->nullable(); 
     $table->integer('subscription_id')->nullable(); 
     $table->timestamp('subscription_end_date')->nullable(); 
     $table->string('avatar')->default("img/default/user-avatar-128.min.png"); 
     $table->integer('highlighted_game_id')->nullable()->default(null); 
     $table->timestamps(); 
     $table->softDeletes(); 
    }); 
+0

Sie haben 'company_id' Spalte in' companies' Tabelle? – piotr

+0

Können Sie Ihr Tabellenschema und Beziehungen in Ihrer Frage zeigen? –

+0

aktualisiert, bitte überprüfen Sie es. Vielen Dank! – user3844579

Antwort

2

Die get Funktion in where-Klausel das Problem verursacht. Versuchen Sie, indem Sie die get entfernen.

So wird Ihr Code aussehen wie:

$query = Service::select('id','company_id','title','description',price); 
$search = $request->input('search',null); 
$query = is_null($search) ? $query : $query->where('title','LIKE','%'.$search.'%')->orWhere('description','LIKE','%'.$search.'%')->orWhereHas('company', function ($q) use ($search) 
    { 
     $q->where('name','LIKE','%'.$search.'%'); 
    }); 


$services= $query->paginate(5); 
+0

danke, funktioniert jetzt! – user3844579

+0

Gut zu helfen ... –