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'); |