我试图检索与父模型(“事件”)和子模型(“日期”)中特定字段匹配的所有雄辩模型。
我遇到了一个问题,拉拉维尔说,我的字段(‘日期’)不存在于孩子班,但我不明白为什么。有人能指出正确的方向并解释我哪里出了问题吗?
本质上,我试图实现的是检索所有事件,其中已批准的标记为true,事件日期为某一特定日期,在本例中为第10天。
我进行了一些搜索,并查看了Laravel文档中的一些示例。我已经建立了(‘事件’)模型,以便与('dates')模型有一对多的关系。我可以看到我可以将查询链接在一起,但是当一次处理多个模型时(在同一个查询中),事情会变得有些混乱。
这是我检索数据的尝试。
public function calender()
{
$events = Event::where('approved', true)->with('EventDates')->whereDay('date', '10')->get();
return view('events.calender');
}这是我(“事件”)模型中的一个片段。我在这里只包含了最相关的信息,因为这里有很多属性。
class Event extends Model
{
//
public function user(){
return $this->belongsTo(User::class);
}
public function dates()
{
return $this->hasMany('App\EventDate');
}
}这是我('EventDate')模型迁移文件中的一个片段,显示'date‘确实是('EventDate')模型的一个字段。再一次,我在这里加入了最相关的功能。
class CreateEventDatesTable extends Migration
{
public function up()
{
Schema::create('event_dates', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
$table->date('date')->nullable();
$table->time('startTime')->nullable();
$table->time('endTime')->nullable();
$table->unsignedBigInteger('event_id');
$table->index('event_id');
});
}
}我希望能够检索将已批准的属性设置为true的匹配事件列表,以及特定日期(xx xx-10)的事件日期。
现在,我正在得到日期列找不到的错误:
SQLSTATE42S22:未找到列:'where子句‘中1054个未知列'date’(SQL: select * from
eventswhere day(date) = 10和approved= 1)
发布于 2019-06-10 16:58:42
我想这就是你要找的:
$events = Event::where('approved', true)
->with(['dates' => function ($query) {
return $query->whereDay('date', '10');
}])
->get();注意:我假设一个事件和它的EventDate之间的关系称为dates
通过这种方式,您将按日对相关数据(EventDate)而不是对Event模型应用筛选。
发布于 2019-06-10 07:45:38
您应该提到日期列的表名。
->whereDay('event_dates.date', '10')发布于 2019-06-10 16:38:23
通过使用DB查询生成器,我设法找到了一种绕过使用雄辩的命令的方法,现在它可以工作了(考虑到Shankar上面的观点)
我修改了代码(它比我以前写的更具体一些,但它应该能够指导其他人解决他们的问题):
for($day = 5; $day <12; $day++)
{
$events = DB::table('events')
->join('event_dates', 'events.id', '=', 'event_dates.event_id')
->select('events.*', 'event_dates.startTime as startTime', 'event_dates.endTime AS endTime')->where('events.approved', '=', true)->whereDay('event_dates.date', '=', $day)
->orderBy('event_dates.startTime', 'asc')->get();
array_push($events_list, $events);
}
```
I can't understand why the Eloquent queries couldn't find the table, but this seems to work, so for those stuck, this may be less "eloquent" but at least it works ;-;https://stackoverflow.com/questions/56522282
复制相似问题