【发布时间】:2013-09-15 08:11:21
【问题描述】:
我正在尝试使用 Laravel 4 解决我的应用程序的问题。问题在于 Eloquent 和 M:M 关系。
这是我的情况: 我有很多用户可以选择很多服务,他们可以为每项服务提供专门的价格。在数据库中,我有名为“services”、“users”和“users_services”的表。 所以目前我可以保存每个用户选择的服务和价格但我的问题是我不知道如何检索并将它们展示给用户,我的意思是我不知道如何设置“已检查”每个选定服务的复选框以及每项服务的价格。
你可以在这里查看代码on Paste Laravel 是否有任何分叉。我也贴在这里。
<?php
class Service extends Eloquent {
public static $rules = array();
protected $guarded = array('id');
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'services';
/**
* -------------------------------------
* All Joins w/ other tables
* -------------------------------------
**/
public function users()
{
return $this->belongsToMany('User','users_services','services_id','user_id');
}
}
......
<?php
class User extends Eloquent {
public static $rules = array();
protected $guarded = array('id');
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* -------------------------------------
* All Joins w/ other tables
* -------------------------------------
**/
public function services()
{
return $this->belongsToMany('Service','users_services','user_id','service_id');
}
}
................
// Inside the controller
$services = Service::all();
$this->layout->content = View::make('private.user.services')->with(compact('services'));
...............
// The view
@foreach($services as $service)
<div class="pull-left col-lg-6 service-container">
<div class="checkbox pull-left">
<label>
<input type="checkbox" name="services[]" value="{{ $service->id }}"><span>{{ $service->name }}</span>
</label>
</div>
<div class="input-group service-price pull-right">
<input type="number" min="0" name="prices[{{$service->id}}]" class="form-control pull-rigth" placeholder="0">
<span class="input-group-btn">
<button class="btn btn-default" type="button" disabled><i class="icon-eur"></i></button>
</span>
</div>
</div>
@endforeach
【问题讨论】:
-
您是否在页面上显示所有服务,并且您想选中当前用户选择的复选框?或者,您是否只在页面上显示当前用户选择的服务?
-
@msturdy 我将显示所有服务,我想检查所选择的复选框。
标签: database laravel many-to-many laravel-4 eloquent