gpt4 book ai didi

database - Laravel 4 多对多与 Eloquent 和复选框

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:22 25 4
gpt4 key购买 nike

我正在尝试使用 Laravel 4 解决我的应用程序的问题。问题是关于 Eloquent 和 M:M 关系。

这是我的情况:我有很多用户可以选择很多服务,他们可以为每一种服务提供专门的价格。在数据库中,我有名为“services”、“users”和“users_services”的表。所以目前我可以保存每个用户选择的服务和价格但是我的问题是我不知道如何检索并向用户展示它们,我的意思是我不知道如何设置“已检查”每个选定服务的复选框以及每个服务的价格。

您可以在这里查看代码 on Paste Laravel对于任何 fork 。我也贴在这里。

    <?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

最佳答案

在您看来,当您遍历所有可能的服务时,您需要检查当前用户是否选择了该服务。

一种方法是将用户服务的第二个集合发送到页面,然后使用 contains()检查方法。

在您的 Controller 中将用户关系中的服务拉入新变量:

$services      = Service::all();
$user_services = $user->services;
$this->layout->content = View::make('private.user.services')->with(compact('services'))->with('user_services', $user_services);

在您看来只需将选中的属性添加到复选框即可。

@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 }}" @if( $user_services->contains($service->id) ) selected@endif><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

注意,它没有经过测试,我不知道模型之间的关系..但应该没问题:)

(请注意,您的其中一门课有错别字。pull-rigth)

关于database - Laravel 4 多对多与 Eloquent 和复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18738877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com