【问题标题】:What's the relationship between Model and Array? It's complicated模型和数组有什么关系?情况很复杂
【发布时间】:2017-11-19 07:40:43
【问题描述】:

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

如果我在帮助程序中有一个数组,可以在像这个例子这样的函数中运行:

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);
    }
}

查看输出时我在 jquery 中使用 if 语句作为 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 语句太糟糕了,代码太长了

我正在寻找击球手的方法来做到这一点

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

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

【问题讨论】:

  • 您是否需要服务器端的 color() 帮助程序,或者将其移至 Javascript 是否可以?
  • 两种方式都会帮助我

标签: javascript jquery laravel eloquent


【解决方案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 会改变,您将 需要在硬编码的任何地方进行更改。
  • 您确实应该重新考虑将颜色放入表格中。

【讨论】:

    【解决方案2】:
    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>
    

    【讨论】:

    • 它的工作text(result.color)text(result.data.color) 没有工作
    • 编辑答案以从 result.data.color 中删除数据以获得 result.color。很高兴它正在工作。
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多