laravel - Laravel 雄辩的请求
问题描述
我有两个模型:Persons 和 PhoneNumbers
人员.php
class Persons extends Model
{
protected $table = 'persons';
protected $guarded = [];
public function phoneNumbers() {
return $this->hasMany('App\PhoneNumbers', 'persons_id', 'id');
}
}
电话号码.php
class PhoneNumbers extends Model
{
protected $table = 'phone_numbers';
protected $guarded = [];
public function persons() {
return $this->belongsTo('App\Persons', 'persons_id', 'id');
}
}
我的桌子:
1) persons (id, first_name, last_name, middle_name)
2) phone_numbers (id, person_phone, persons_id)
我有一个用于搜索名字、中间名、姓氏、个人电话的表格。我提出一个要求:
$first_name = $request->first_name;
$middle_name = $request->middle_name;
$last_name = $request->last_name;
$persons = Persons::where('first_name', 'LIKE', '%' . $first_name . '%')
->where('middle_name', 'LIKE', '%' . $middle_name . '%')
->where('last_name', 'LIKE', '%' . $last_name . '%')
->whereHas('phoneNumbers', function (Builder $query) {
$person_phone = ((new \Illuminate\Http\Request)->get('person_phone'));
$query->where('person_phone', 'like', '%' . $person_phone . '%')->first();
})->latest()->paginate(5);
并得到一个错误:
SQLSTATE [42S22]:找不到列:1054 'where 子句'中的未知列'persons.id'(SQL:select * from
phone_numbers
wherepersons
.id
=phone_numbers
.persons_id
andperson_phone
like %% limit 1)
似乎 Laravel 为我的列提供了“错误”的名称并生成了不正确的 SQL。我知道命名约定。但我找不到错误。你能帮我用 Eloquent 制作正确的 SQL 吗?
解决方案
尝试
$this->belongsTo('App\Persons');
$query->where('phone_numbers.person_phone', 'like', '%' . $person_phone . '%')->first();
这也可以
->whereHas('phoneNumbers', function ($query) use ($request) {
$query->where('person_phone', 'like', '%' . $request->person_phone . '%')->first();
})->latest()->paginate(5);
推荐阅读
- flutter - 关闭对话框加载进度
- imagesharp - 使用 ImageSharp 调整图像的伽玛
- django - Django photologue 图像和查询集
- javascript - 如何将异步 HOC 组件重写为 React Hooks?
- php - 未知 POST 内容长度超出限制
- karate - 如何使用空手道框架中的功能文件调用 Android 模拟器
- java - 如何在 Android 单元测试中模拟 FileInputStream 和 FileOutputStrem 构造函数?
- twilio - Twilio SMS 到语音通话
- vmware - 出现错误:通过 vmware burp-rest-api 检索问题时出现错误请求
- html - 如何使用 Bootstrap 4 使输入时间响应