模型和数组有啥关系?情况很复杂

Posted

技术标签:

【中文标题】模型和数组有啥关系?情况很复杂【英文标题】: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 是否可以? 两种方式都会帮助我 【参考方案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。很高兴它正在工作。

以上是关于模型和数组有啥关系?情况很复杂的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS - 如何使用代理,模型?它们有啥关系?

实体关系模型和关系模型有啥区别?

多表继承模型和相同两个模型之间的简单一对一关系有啥区别?

如何用简单易懂的例子解释条件随机场模型?它和HMM有啥区别

Laravel5.1 模型--关联关系(复杂)

Ember CLI 测试复杂的模型关系