关于 eloquent:Laravel 列表与下拉关系

Laravel lists with relationship for a dropdown

我有两张桌子:

课程

  • ID
  • 名称
  • 季节ID
  • 教师编号
  • 日期ID
  • 描述
    ...

course_dates

  • ID
  • course_id
  • 工作日
  • 开始
  • 停止
    ...

第一张表是课程的基本内容。在第二个表中,我只存储课程的日期(即星期一的工作日 1,开始 -> 开始和停止的时间 -> 结束)。课程可以有多个日期。

现在我想为这样的下拉列表创建一个列表:

  • 课程名称(天,从到)
  • 相同的课程名称(另一天,从到到)
  • 另一个课程名称(天,从到到)

我完成一个小辅助函数的那一天的名称。

如何使用访问器操作列表方法的参数?

感谢您的帮助!

课程模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
    <?php

class Course extends \\Eloquent {

    protected $guarded = ['id', 'created_at', 'updated_at'];

    //Relationship Holidays
    public function holidays()
    {
        return $this->hasMany('Holiday');
    }

    //Relationship Teacher
    public function teacher()
    {
        return $this->belongsTo('Teacher');
    }

    //Relationship User
    public function bookings()
    {
        return $this->hasMany('Booking');
    }

    //Relationship Dates
    public function dates()
    {
        return $this->hasMany('Dates');
    }

    //Accessor for Dates
    public function getWeekdayAttribute()
    {
        //???
    }

    //Validation Rules
    public static $rules = [
        'name'          =>  'required',
        'teacher_id'    =>  'required',
        'description'   =>  'required',
        'room'          =>  'required',
        'price'         =>  array('required', 'regex:/^\\d*(\\,\\d{2})?$/'),
        'maxuser'       =>  'required|numeric',
        'target'        =>  'required'
    ];


    //Custom Attribute Names
    public static $names = [
        'name'          =>  'Kursname',
        'teacher_id'    =>  'Kursleiter',
        'description'   =>  'Beschreibung',
        'room'          =>  'Raum/Ort',
        'price'         =>  'Preis',
        'maxuser'       =>  'Max. Anzahl Teilnehmer',
        'target'        =>  'Zielgruppe'
    ];

    //Change Price Format Get
    public function getPriceAttribute($price)
    {
        return number_format($price, 2, ',', '');
    }

    //Change Price Format Set
    public function setPriceAttribute($price)
    {
        $this->attributes['price'] = str_replace(',', '.', $price);
    }

    //Unserialize Target Get
    public function getTargetAttribute($target)
    {
        return unserialize($target);
    }

    //Serialize Target Set
    public function setTargetAttribute($target)
    {
        $this->attributes['target'] = serialize($target);
    }
}

日期模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
    <?php

class Dates extends \\Eloquent {

    protected $guarded = ['id', 'created_at', 'updated_at'];

    protected $table = 'course_dates';

    public function courses()
    {
        return $this->belongsTo('Course')->orderBy('name');
    }

    //Validation Rules
    public static $rules = [
        'weekday'   =>  'required',
        'start'     =>  'required|date_format:H:i',
        'stop'       =>  'required|date_format:H:i'
    ];

    //Custom Attribute Names
    public static $names = [
        'weekday'   =>  'Wochentag',
        'start'     =>  'Von',
        'stop'       =>  'Bis'
    ];


}

辅助函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Display Weekday
function showWeekday($id)
{
    $weekday = array(
        '1' => 'Montag',
        '2' => 'Dienstag',
        '3' => 'Mittwoch',
        '4' => 'Donnerstag',
        '5' => 'Freitag',
        '6' => 'Samstag',
        '0' => 'Sonntag'
    );

    return $weekday[$id];
}


如果我理解正确的话,可以这样做:

课程日期模型

1
2
3
public function getNameAndTimeAttribute(){
    return $this->course->name . ' ' . $this->attributes['start'] . ' - ' . $this->attributes['stop'];
}

然后:

1
$dropdown = CourseDate::with('course')->get()->lists('nameAndTime', 'id');