Laravel全新并尝试使用ORM从两个通过外键连接的表中获取数据。我不知道我错过了什么,但它必须是#%#,请帮助并保持友善:)
我有两个表widgets
和widget_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');
}
}
答案 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);
}
}
如果你做对了,请告诉我