【问题标题】:Using HasMany relationship when Model and table have different names当 Model 和 table 具有不同的名称时使用 HasMany 关系
【发布时间】:2020-04-13 02:48:26
【问题描述】:

正如标题所说,我的 Field 模型和 application_fields 表有不同的名称。我已经将 Field 模型上的表名设置为正确的表名。我有另一个模型 Application 及其控制器 ApplicationController。在 ApplicationController 的 index 方法中,我试图检索应用程序及其字段。 Field模型与Application有belongsTo关系,Application模型与Field有hasMany关系。

代码似乎可以工作,除了它从应用程序表中提取行的值。因此,如果应用程序表有以下行:

1 'AppOne' '一个应用'

2 'AppTwo' '另一个应用程序'

3 'AppThree' '第三个应用程序'

AppOne、AppTwo 和 AppThree 作为字段的值返回。

谁能给我一些建议?

这是他们的代码(我只复制了与问题相关的内容,而不是整个文件):

应用模型:

/**
     * The table associated with the model.
     *
     * @var string
     */
protected $table = 'application_fields';

public function fields()
    {
return $this->hasMany('App\Field');
    }    

场模型:

public function application()
    {
return $this->belongsTo('App\Application');
    }  

应用控制器:

/**
     * Display the dashboard for a single application.
     *
     * @param String $id
     * @return View
     */
public function show( $id )
    {
$app = Application::where('id', $id)->first();
$fields = $app::with('application_fields')->get();
return view('applications.show', [
'application' => $app,
'fields' => $fields,
        ]);
    }  

查看(我去掉了 HTML):

{{ $application->name }}
{{ $application->description }}
@foreach($fields as $field)
{{ $field->name}}

 @endforeach    

对于我做错的任何建议,我将不胜感激。谢谢

【问题讨论】:

    标签: laravel eloquent model laravel-6


    【解决方案1】:

    您的 show 方法错误,急切加载不起作用:)

        public function show( $id ) {
    
        $app = Application::with('fields')->find($id);
        $fields = $app->fields;
        return view('applications.show', [
            'application' => $app,
            'fields' => $fields,
        ]);
        }  
    

    如果您的路线是这样的,您也可以使用模型绑定:applications/{app}

        public function show(Application $app) {
        $fields = $app->fields;
        return view('applications.show', [
            'application' => $app,
            'fields' => $fields,
        ]);
        }  
    

    【讨论】:

    • 这是有道理的。但是,如果我使用您提供的第一个 show 方法,我不会在视图中看到“foreach 提供的无效参数”。因此,出于某种原因,我的领域还没有通过。
    • 不好意思,我没有读到你们关系的名字,我编辑了我的答案
    猜你喜欢
    • 2020-06-27
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多