Model和Array之间的关系是什么?这很复杂

时间:2017-06-16 13:40:25

标签: javascript jquery laravel eloquent

寻找在模型和数组之间建立关系的想法

如果我在像这个例子这样的函数中运行helper中的数组:

PHP

function color(){
$array = ['Black','Red','Orange','Yellow','Green','Blue'];
return $array;
}

并在我的数据库中有一个表返回上面数组的值的键

public function up()
{
    Schema::create('color', function (Blueprint $table) {
        $table->tinyIncrements('id');
        $table->tinyInteger('color_number');
        $table->timestamps();
    });
}

控制器

    public function viewAjax(Request $request)
{
    if($request->ajax()){
        $id = $request->id;
        $info = Color::find($id);
        return response()->json($info);
    }
}

查看输出时我使用if jquery中的语句作为ajax请求

视图     

<label> user color: </label><span id="view_user_color"></span>


<script type="text/javascript">
function fun_view_color(id)
{
    var view_url = $("#hidden_view_color").val();
    $.ajax({
        url: view_url,
        type:"GET",
        data: {"id":id},
        success: function(result){
            function typeColor() {
                if (color === 0) {
                    $("#view_user_color").text("Black");
                } elseif(color === 1) {
                    $("#view_user_color").text("Red");
                }elseif(color === 2) {
                    $("#view_user_color").text("Orange");
                }elseif(color === 3) {
                    $("#view_user_color").text("Yellow");
                }elseif(color === 4) {
                    $("#view_user_color").text("Green");
                }elseif(color === 5) {
                    $("#view_user_color").text("Blue");
                }

            }
        }
    });
}

使用if语句这么糟糕并且使代码太长

我正在寻找能够做到这一点的击球方式

我知道还有另一种方法可以让表格包含颜色并用外键引用

但这不是我的目标,我需要使用数组

2 个答案:

答案 0 :(得分:1)

首先,一个笑话:Model和Array之间的关系是什么?这太复杂了。

感谢。

现在,您可以使用查找数组作为帮助程序(我将其重命名为colorMap())。考虑一下:

<?php

function colorMap() {

    // The keys match the color IDs you store in the database
    $array = [
        '0' => 'Black',
        '1' => 'Red',
        '2' => 'Orange',
        '3' => 'Yellow',
        '4' => 'Green',
        '5' => 'Blue'
    ];

    return $array;
}


<?php

public function viewAjax(Request $request) {

    if ($request->ajax()) {
        $id = $request->id;
        $info = Color::find($id);

        // Pass an array containint the Color Model and the color map
        return response()->json([
            'color' => $info,
            'colorMap' => colorMap()
        ]);
    }
}

和JS:

<script type="text/javascript">

    function fun_view_color(id) {

        var view_url = $("#hidden_view_color").val();

        $.ajax({
            url: view_url,
            type:"GET",
            data: {"id":id},
            success: function(result) {
                setColorName(result);
            }
        });
    }

    function setColorName(result) {

        var colorId = result.info.id; // Passed from controller
        var colorName = result.colorMap[colorId]; // Passed from controller

        $("#view_user_color").text(colorName);

    }

</script>

注意:

  • 代码未使用您应提供的任何验证
  • 这种方法有一个重大缺陷:如果颜色ID会发生变化,那么你就是这样 需要在硬编码的任何地方进行更改。
  • 你真的应该重新考虑把颜色放到桌子里。

答案 1 :(得分:1)

public function viewAjax(Request $request)
   {
    //include the helper function 
    $colors = color(); //array of colors
    if($request->ajax()) {
    $id = $request->id;
    $info = Color::find($id);
    $info->color = $colors[$info->color_number];
    return response()->json($info);
   }

} 并在视图中

<label> user color: </label><span id="view_tower_color"></span>


    <script type="text/javascript">
       function fun_view_color(id)
      {
        var view_url = $("#hidden_view_color").val();
        $.ajax({
        url: view_url,
        type:"GET",
        data: {"id":id},
        success: function(result){
                    $("#view_user_color").text(result.color);
                          }
        });
    }
</script>
相关问题