我正在尝试检索与父模型(“事件”)和子模型(“日期”)中的特定字段匹配的所有口才模型。
我遇到了一个问题,Laravel指出子字段中不存在我的字段(“日期”),但我不明白为什么。有人可以指出正确的方向,并解释我哪里出了问题吗?
本质上,我要实现的是检索所有批准标签为true且事件日期为特定日期(在本例中为第十天)的事件。
我已经进行了一些搜索,并查看了Laravel文档中的一些示例。我已经将('Event')模型设置为与('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的匹配事件的列表,以及特定日期(xxxx-xx-10)的事件日期
现在,我收到无法找到日期列的错误:
SQLSTATE [42S22]:找不到列:1054'where子句'中的未知列'date'(SQL:从
events
中选择*,其中day(date
)= 10和{{1} } = 1)
答案 0 :(得分:0)
您应该在日期列中提及表格名称。
->whereDay('event_dates.date', '10')
答案 1 :(得分:0)
我设法通过使用“数据库查询”构建器找到了使用雄辩命令的方法,并且现在可以了(考虑到了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 ;-;
答案 2 :(得分:0)
我认为这就是您想要的:
$events = Event::where('approved', true)
->with(['dates' => function ($query) {
return $query->whereDay('date', '10');
}])
->get();
注意:我假设您在一个Event和它的EventDate之间的关系称为dates
通过这种方式,您将按天对相关数据(EventDate
)而不是对Event
模型进行过滤。