2016-10-24 8 views
0

Я хочу искать в таблице контактов и в таблице ссылок связи в соответствии с именем или мобильным номером. где мой мобильный телефон находится в таблице communication_links в 'value', а fname и lname - в таблице контактов. но есть связь в линии связи и в resource_status с помощью rest_id. и снова resource_status связан с типом ресурса.Проблема в отношениях laravel 5.3?

Это мой сырая SQL запрос

SELECT contacts.fname, contacts.lname, communication_links.value FROM contacts ,communication_links,resource_status 
        where 
        (contacts.id = communication_links.cont_id) 
        AND 
        (communication_links.rest_id = resource_status.id) 
        AND 
        resource_type.status LIKE '{mobile}%' 
        AND 
        (communication_links.value LIKE '{$search_string}%' OR 
        contacts.fname LIKE '{$search_string}% OR contacts.lname LIKE '{$search_string}% ) 

Я следующая структура таблицы

contacts 
    id 
    fname 
    lname 
    dob 

communication_links 
    id 
    rest_id 
    cont_id 
    value 

resource_type 
    id 
    type 

resource_status 
    id 
    Status 
    rety_id 

И я создал следующие модели для поддержания отношений

contact.php

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Contact extends Model 
{ 
    protected $connection = 'mysql_freesubs'; 

    public $timestamps = false; 

    public function communicationLinks() 
    { 
     return $this->hasMany(Communication_link::class, 'cont_id'); 
    } 
} 

Communication_link.php

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Communication_link extends Model 
{ 
    protected $connection = 'mysql_freesubs'; 


    public $timestamps = false; 

    public function resource() 
    { 
     return $this->belongsTo(Resource_status::class, 'rest_id'); 
    } 

    public function contact() 
    { 
     return $this->belongsTo(Contact::class, 'cont_id'); 
    } 
} 

Resource_status.php

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Resource_status extends Model 
{ 
    protected $connection = 'mysql_freesubs'; 
    protected $table = 'resource_status'; 


} 

Resource_type.php

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Resource_type extends Model 
{ 
    protected $connection = 'mysql_freesubs'; 

    public $timestamps = false; 

    public function resourceStatuses() 
    { 
     return $this->hasMany(Resource_status::class, 'rety_id'); 
    } 
} 

Я попытался написать тот же запрос, как я дал выше, но я не получил результат желания:

$parent_contact = \App\Contact::with('communicationLinks.resource') 
              ->whereHas('communicationLinks.resource', function ($query) { 
                $query->where('status', 'LIKE', "{mobile}%"); 
               }) 

              ->whereHas('communicationLinks.contact',function ($query) use($request) { 
               $query->where('communicationLinks.value','LIKE',"{$request->search_string}%") 
                 ->orWhere('fname','LIKE',"{$request->search_string}%") 
                 ->orWhere('lname','LIKE',"{$request->search_string}%"); 
               }) 
              ->get(); 
+0

вы пытались с помощью Laravel свободно запрашивать таблицы я имею в виду, пишущую Laravel запрос с 'DB :: raw', который будет генерировать запрос SQL синонимов sql, который вы написали выше –

+0

Не в laravel, но я запустил его в структурном php – sam

+0

попробуйте laravel свободно с использованием 'DB :: table' –

ответ

2
$query = DB::table("contacts as a") 
       ->select(array("a.fname", "b.lname", "b.value")) 
       ->join("communication_links AS b", "a.id", "=", "b.cont_id") 
       ->join("resource_type AS c", "b.rest_id", "=", "c.id") 
       ->where("a.status", "like", $mobile."%") 
       ->where("b.value", "like", $search_string."%") 
       ->orWhere("a.fname", "like", $search_string."%") 
       ->orWhere("a.lname", "like", $search_string."%") 
       ->get(); 

Это должно сделать работу для вас.

Вы можете просто перебирать его, чтобы получить свои значения по желанию

+0

Спасибо @Ghost Worker – sam

+0

Вы больше всего приветствуетесь –

+0

Но есть ли какие-либо различия рента, чтобы решить это, потому что это немного медленнее в преуспевании. – sam

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