如何使用Blade在Laravel中显示选择框的选定选项的详细信息?

时间:2015-02-03 09:12:55

标签: javascript php jquery laravel laravel-4

我是Laravel新手有些我如何设计显示数据库内容到选择框。我想要的是,我需要根据在选择框中选择的ID从另一个表中获取数据。我的代码如下:

刀片

<h2 class="comment-listings">Subscriber listings</h2><hr>
<table>
    <thead>
    <tr>
        <th>Slelect a List:</th>
        
        <th><select class="form-control input" name="list1s" id="list1s" >
            <option selected disabled>Please select one option</option>
            @foreach($list1s as $list1)
                <option value="{{$list1->id}}">{{$list1->name}}</option>
            @endforeach
            </select>
           
            </th>
      </tr>
    </thead>
</table>
<table>
    <thead>
    
    <tr>
        <th>Device ID</th>        
        <th>Status</th>
        <th>Delete</th> 
    </tr>
    </thead>
    <tbody>
    @foreach($subscribers as $subscriber)
    <tr>
        <td>{{{$subscriber->device_id}}}</td>                
        <td>{{$subscriber->list1->name}}</td>
        <td>

            {{Form::open(['route'=>['subscriber.update',$subscriber->id]])}}
            {{Form::select('status',['approved'=>'Approved','blocked'=>'Blocked'],$subscriber->status,['style'=>'margin-bottom:0','onchange'=>'submit()'])}}
            {{Form::close()}}
        </td>
        <td>{{HTML::linkRoute('subscriber.delete','Delete',$subscriber->id)}}</td>
        
    </tr>
    @endforeach

    </tbody>
</table>
<script>
$('#list1s').on('change',function(e){
    console.log(e);
    var list_id = e.target.value;

    $.get('/subscriber/get?list_id=' + list_id, function(data){
        console.log(data);
    })
})
</script>
{{$subscribers->links()}}

用于填充选择框的控制器

public function listList()
{
    $list1s = List1::all();
    $this->layout->title = 'Subscriber Listings';
    $this->layout->main = View::make('dash')->nest('content', 'subscribers.list', compact('list1s'));
    $subscribers = Subscriber::orderBy('id', 'desc')->paginate(20);
    View::share('subscribers', $subscribers);
}

这显示了所有列表和订阅者。 由于我需要显示在选择框中选择的列表的订阅者,我在Blade的底部添加了一个脚本,并在路由中添加了其他控制器功能,以根据从脚本传递的list_id执行任务。

 Route::get('/subscriber/get', function(){
    $list_id = Input::get('list_id');
    $subscribers = Subscriber::where('list1_id','=', $list_id)->get();
    return Response::eloquent($subscribers);
});

但是没有发生任何变化,我错在哪里?

2 个答案:

答案 0 :(得分:1)

我编辑了我的代码,并且成功了。

刀片

<h2 class="comment-listings">Campaign listings</h2><hr>
<script data-require="jquery@2.1.1" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <thead>
    <tr>
        <th>Select a List:</th>
        
        <th>
           <select class="form-control input" name="list1s" id="list1s" onchange="displayVals(this.value)">
            <option selected disabled>Please select a list</option>
            @foreach($list1s as $list1)
                <option value="{{$list1->id}}">{{$list1->name}}</option>
            @endforeach
            </select>
           
            </th>
      </tr>
    </thead>
</table>
    <div id="campaign">
    
    </div> 
<script>
function displayVals(data)
{
    var val = data;
    $.ajax({
    type: "POST",
    url: "get",
    data: { id : val },
        success:function(campaigns)
        {
            $("#campaign").html(campaigns);
        }
    });
}
</script>

路线

Route::any('/campaigns/get', [
    'as' => '/campaigns/get', 
    'uses' => 'CampaignController@getCampaigns'
    ]);

控制器

public function getCampaigns()
{
$list1 = Input::get('id');
$campaigns = Campaign::orderBy('id', 'desc')
->where('list1_id','=', $list1)
->where('user_id','=',Auth::user()->id)
->paginate(10);
return View::make('campaigns.ajaxShow')->with('campaigns', $campaigns);
}

我现在有一个单独的刀片(ajaxShow)在选择框中更改选项时加载。

<table>
    <thead>
    <tr>
        <th>Campaign title</th>        
        <th>Status</th>
        <th>Delete</th> 
    </tr>
    </thead>
    <tbody>
@foreach($campaigns as $campaign)
    <tr>
        <td>{{{$campaign->template->title}}}</td>                
        <td>

            {{Form::open(['route'=>['campaign.update',$campaign->id]])}}
            {{Form::select('status',['yes'=>'Running','no'=>'Stoped'],$campaign->running,['style'=>'margin-bottom:0','onchange'=>'submit()'])}}
            {{Form::close()}}
        </td>
        <td>{{HTML::linkRoute('campaign.delete','Delete',$campaign->id)}}</td>
    </tr>
    @endforeach
</tbody>
</table>
{{$campaigns->links()}}

答案 1 :(得分:0)

在Laravel 4及更高版本的eloquent中没有实现Illuminate\Http\Response方法(我相信该方法仅适用于Laravel 3)。但您可以返回json响应:

Route::get('/subscriber/list', function(){
    $list_id = Input::get('list_id');
    $subscribers = Subscriber::where('list1_id','=', $list_id)->get();

    return Response::json($subscribers);
});