laravel 5.3关系中的问题?
我想根据姓名或手机号在联系人表和通信链接表中搜索。其中,我的手机在“值”的通信链接表中,fname和lname在联系人表中。但是,通过使用rest\u id,在通信链路和资源\u状态中存在一种关系,并且资源\u状态与资源类型相连接 这是我的原始sql查询laravel 5.3关系中的问题?,laravel,laravel-5.3,Laravel,Laravel 5.3,我想根据姓名或手机号在联系人表和通信链接表中搜索。其中,我的手机在“值”的通信链接表中,fname和lname在联系人表中。但是,通过使用rest\u id,在通信链路和资源\u状态中存在一种关系,并且资源\u状态与资源类型相连接 这是我的原始sql查询 SELECT contacts.fname, contacts.lname, communication_links.value FROM contacts ,communication_links,resource_status
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');
}
}
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');
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Resource_status extends Model
{
protected $connection = 'mysql_freesubs';
protected $table = 'resource_status';
}
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');
}
}
通信链接.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');
}
}
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');
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Resource_status extends Model
{
protected $connection = 'mysql_freesubs';
protected $table = 'resource_status';
}
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');
}
}
Resource\u status.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');
}
}
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');
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Resource_status extends Model
{
protected $connection = 'mysql_freesubs';
protected $table = 'resource_status';
}
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');
}
}
Resource\u type.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');
}
}
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');
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class Resource_status extends Model
{
protected $connection = 'mysql_freesubs';
protected $table = 'resource_status';
}
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();
这应该能帮你完成任务
您只需遍历它即可获得所需的值
这应该能帮你完成任务
您可以通过迭代来获得所需的值您是否尝试过使用laravel fluent来查询表我的意思是使用
DB::raw
编写laravel查询,它将生成与您上面编写的sql同义的sql查询不是在laravel fluent中,而是在structural phptry out laravel fluent中使用DB::table
我收到了这个错误“类的对象\Database\Query\Builder无法转换为字符串”抱歉,我无法在此发布查询您是否尝试过使用laravel fluent查询表我的意思是使用DB::raw
编写laravel查询,它将生成与您上面编写的sql同义的sql查询不是在laravel fluent中,而是在structural phptry out laravel fluent中使用DB::table
运行的,我遇到了这个错误“无法将Illumb\Database\Query\Builder类的对象转换为字符串“很抱歉,我不能在这里发布查询,但是有没有其他方法来解决这个问题,因为这个方法在处理过程中有点慢。您可能想查看您的数据库,也许添加索引会有所帮助,因为这不再是一个laravel问题。您可以安装laravel debugbar来查看查询需要多长时间。如何调试查询?哦,我知道了。抱歉,没什么。但是有没有其他方法来解决这个问题,因为这个方法在处理过程中有点慢。你可能想看看你的数据库,也许添加索引会有所帮助,因为这已经不再是laravel的事情了。您可以安装laravel debugbar来查看查询需要多长时间。如何调试查询?哦,我知道了。对不起,没什么。