Laravel外键带()问题

时间:2017-12-13 21:04:25

标签: php laravel-5 eloquent

Laravel全新并尝试使用ORM从两个通过外键连接的表中获取数据。我不知道我错过了什么,但它必须是#%#,请帮助并保持友善:)

我有两个表widgetswidget_types通过外键widgets->widget_type_id引用widget_types->id。现在,当使用Controller引入此数据时......只有第一个对象填入了widget_type参数:

HomePageController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Widget;

class HomePageController extends Controller
{
    public function get() {
        $data['page_title'] = "Home";
        $data['widgets'] = Widget::where([ ['is_default', '=', 1], ['is_guest', '=', 1] ])->with('widget_type')->get();

        return $data['widgets'];
        return view('home', $data);
    }
}

现在第一个return语句返回如下内容:

  

[{ “ID”:1, “widget_type_id”:1, “is_default”:1, “is_guest”:1, “widget_title”:“欢迎   到应用程序“,”widget_content“:”如果不是,奖励有什么好处   在附近使用它?此外,攻击战斗站不是我的想法   勇气它更像是“自杀”。但随着爆炸盾   下来,我甚至看不到!我该怎么做   打 “ ”created_at?“:空 ”的updated_at“:空, ”WIDGET_TYPE“:{ ”ID“:1, ”CLASS_NAME“: ”文本控件“, ”TEMPLATE_NAME“: ”text_widget“, ”FRIENDLY_NAME“:”文本   窗口小部件 “ ”created_at“:空 ”的updated_at“:空}},{ ”ID“:2, ”widget_type_id“:1, ”is_default“:1, ”is_guest“:1, ”widget_title“:” 什么   我可以在这里做吗?“,”widget_content“:”不过,她有很多精神。一世   不知道,你怎么看?孩子,我从这一方面飞过来   对另一个星系。我见过很多奇怪的东西,但我从来没有   看到任何东西让我相信有一个全能的力量   控制一切。控制没有神秘的能量场   我的命运。这都是很多简单的技巧   无义 “” created_at。 “:空” 的updated_at “:NULL,” WIDGET_TYPE“:空}]

请注意,第二项具有null作为窗口小部件类型

WHYYYY?我可以确认表格是否正确创建,我认为我没有关键流程反转...(如果我这样做...我很抱歉)

Widget.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Widget extends Model
{
    protected $table = 'widgets';

    public function widget_type()
    {
        return $this->belongsTo('App\Models\WidgetType', 'id');
    }
}

WidgetType.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class WidgetType extends Model
{
    protected $table = 'widget_types';
}

WidgetType迁移

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateWidgetTypesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('widget_types', function (Blueprint $table) {
            $table->increments('id');
            $table->string('class_name');
            $table->string('template_name');
            $table->string('friendly_name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('widget_types');
    }
}

小组件迁移:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateWidgetsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('widgets', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('widget_type_id')->unsigned();
            $table->foreign('widget_type_id')->references('id')->on('widget_types');
            $table->boolean('is_default');
            $table->boolean('is_guest');
            $table->string('widget_title');
            $table->longText('widget_content');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('widgets');
    }
}

1 个答案:

答案 0 :(得分:2)

您需要指定外键列

<强> Widget.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Widget extends Model
{
    protected $table = 'widgets';

    public function widget_type()
    {
        return $this->belongsTo('App\Models\WidgetType', 'widget_type_id');
    }
}

<强> WidgetType.php

  <?php

    namespace App\Models;

    use Illuminate\Database\Eloquent\Model;

    class WidgetType extends Model
    {
        protected $table = 'widget_types';

        public function widgets(){
        return $this->hasMany('App\models\Widget','widget_type_id')    
        }    
    }

然后在您的控制器中,您可以访问它。 的 HomePageController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Widget;

class HomePageController extends Controller
{
    public function get() {
        $data['page_title'] = "Home";
        $data['widgets'] = Widget::where([ ['is_default', '=', 1], 
        ['is_guest', '=', 1] ])->widget_type;
        dd($data['widgets']);
       // this is belongs to method 

        return $data['widgets'];
        return view('home', $data);
    }
}

如果你做对了,请告诉我