Laravel 5使用Ajax从级联下拉列表中的数据库中获取数据

时间:2016-03-02 08:07:49

标签: javascript ajax laravel-5 laravel-5.1 cascadingdropdown

我对laravel5很新,这是我第一次使用MVC框架。我已经厌倦了阅读laravel文档,但仍然无法找到实现它的方法......

我想做一个级联下拉列表,如下面的链接:

  

http://buffernow.com/demo/cascadedrpdwn/

可以从

下载
  

http://www.mediafire.com/?p8al84azf2hh7mz

和解压缩密码

  

buffernow.com1717

似乎它调用doAjax将参数传递给另一个php来执行查询,所以可能有3个其他的php来执行它..

我从谷歌搜索,它显示了一些jquery或js示例,但我不知道如何转换为Laravel(MVC结构)格式。

目前我只是创建刀片,控制器,模型,然后几乎整整一天。任何人都可以帮我指出我可以按照结构构建它的方式或资源,就像链接中的演示一样..?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这样做的一种示例方式。

让我们说我们的国家和城市有App \ Country和App \ City模型。国家有许多城市。

两个控制器。 CountryController和CountryCityController。 我们想在CountryController中显示一个下拉列表,当用户选择一个国家/地区时,我们希望显示与该国家/地区相关的城市。

国家:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Country extends Model
{
    public function cities()
    {
        return $this->hasMany(App\City::class)
            ->select("id", "city_id", "name");
    }
}

CountryController:

<?php

namespace App\Http\Controllers;

use App\Country;

class CountryController extends Controller
{
    public function index()
    {
        $countries = Country::select("id", "name")->get();

        return \View::make("view")->with("countries", $countries);
    }
}

城市:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class City extends Model
{
    /**
     * @return JSON
     */
    public function country()
    {
        return $this->belongsTo(App\Country::class);
    }
}

CountryCityController:

<?php

namespace App\Http\Controllers;

use App\Country;

class CountryCityController extends Controller
{
    public function index($countryId)
    {
        return Country::whereId($countryId)->first()->cities;

        // Or a better way:

        return Country::findOrFail($countryId)->cities;
    }
}

当用户选择国家/地区时,您会收听它,使用ajax转到CountryCityController @ index并添加生成第二个下拉列表的选项。

希望这是有道理的。

答案 1 :(得分:0)

亲爱的Hilmi Erdem KEREN:

很高兴你回答了我的问题,我已经有了基本的想法。非常感谢。并且因为我想创建3级级联下拉列表来显示与3级下拉列表记录匹配的数据,就像我选择CISB110(这是课程代码) - &gt;赋值(这是分类) - &gt; 1(这是classification_index),然后将通过Ajax显示匹配的记录。

我的数据库中有三个表:

  

course.table:

course_id course_code

1 CISB110

2 CISB210

  

classificaiton.table:

course_id classification_id classification_name

1 1作业

1 2测验

  

mark.table:

course_id classification_id classification_index mark

1 1 1 80

1 2 1 90

然后我按照你的结构然后我创建了这些:

CourseController(就像你的例子:国家)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Course;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class CourseController extends Controller
{
  public function index()
  {
    $courses = Course::select("course_id", "coursen_code")->get();

    return \View::make("marks-management")->with("courses", $courses);
  }
}

CourseClassificationController :(喜欢城市)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Course;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class CourseClassificationController extends Controller
{
  public function index($course_id)
  {
    return Country::findOrFail($course_id)->first()->classifications;
  }
}

MarksManagementController:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\MarksManagement;
use App\Http\Controllers\Controller;

class MarksManagementController extends Controller
{

  public function __construct()
  {
    $this->middleware('auth');
  }

  public function index()
  {
    return view('marks-management');
  }
}

和模特,

Course.php:

class Course extends Model
{
  public function classifications()
  {
     return $this->hasMany(App\Classification::class)
        ->select("course_id", "classification_id", "classification_name");
  }
}

Classification.php:

class Classification extends Model
{
  public function Course()
  {
    return $this->hasMany(App\Classification::class)
        ->select("classification_id", "classification_index_id", "classification_index_name");
    return $this->belongsTo(App\Course::class);
  }
}

Classification_index.php:

class Classification_index extends Model
{
  public function Classification()
  {
    return $this->belongsTo(App\Classification::class);
  }
}

MarksManagement.php

class MarksManagement extends Model
{
  protected $table = 'mark';
  public $timestamps = false;
}

观点,

马克 - management.blade.php

@extends('app')

@section('content')

<div>
  <p>
    <b>Course Code: </b>
        <select name="course_code" id="course_code" onChange="">
            <option value="">Please select:</option></select>
    <b>Classification: </b>
        <select name="classification_name" id="classification_name" disabled="disabled" onChange="">
            <option value="">Please select:</option></select>
    <b>Classification Index:</b>
        <select name="classification_index" id="classification_index" disabled="disabled" onChange="showOutput();">
            <option value="">Please select:</option></select>
  </p>

  <div id="output"></div>
</div>

<script type="text/javascript">
function showOutput(){
  alert("The mark is: " + '';
}
</script>
@endsection

和routes.php

Route::group(['middleware' => 'web'], function () {
  Route::auth();
  Route::get('/marks-management','MarksManagementController@index');

});

我知道有很多错误,并且遗漏了一些重要内容,但我真的想学习并知道如何在Laravel5中应用带有获取数据库记录的Ajax级联下拉列表。感谢您耐心观看我的愚蠢代码......如果您感到自由,我想更多地倾听您的建议。