【问题标题】:How to submit data to multiple tables in the same form如何在同一个表单中向多个表提交数据
【发布时间】:2014-05-15 19:40:28
【问题描述】:

我有 2 个表:listings 和 Listings_specifications

列表表格

  • 身份证
  • 类型
  • 状态
  • 位置
  • specifications_id

Listings_specifications 表

  • 身份证
  • listing_id
  • 游泳池
  • water_well

我需要在添加列表时使用的同一表单上选择规格(复选框)。我已经创建了所有的表单、视图、模型、控制器,但我认为我有一些逻辑错误。

Listing.php 模型

受保护的 $table = 'listings';

public function contact()
{
   return $this->BelongsTo('contacts');
}
public function specifications()
{
   return $this->BelongsTo('listings_specifications');
}

Specification.php 模型

受保护的 $table = 'listings_specifications';

public function listings()
{
   return $this->BelongsTo('listings');
}

ListingsController.php(数据保存在数据库中的位置)

$listing = new Listing;
                $contact = new Contact;
                $listing->status = Input::get('status');
                $listing->listingfor = Input::get('listingfor');
                $listing->propertystatus = Input::get('propertystatus');
                $listing->propertytype = Input::get('propertytype');
                $listing->userid = Auth::user()->id;
                $listing->location = Input::get('location');
                $listing->contact_id = $contact_id;

                $listing->save();

                $specifications = Specification::find($id);

                if( $listings->save() ) {
                        $specifications = new Specification;
                        $specifications->listing_id = $id;
                        $specifications->swimming_pool       = Input::get('swimming_pool');
                        $specifications->water_front      = Input::get('water_front');
                        $specifications->save();
                }

我收到此错误:未定义变量:id

我哪里做错了?

谢谢

【问题讨论】:

    标签: php mysql laravel laravel-4


    【解决方案1】:

    您在$specifications = Specification::find($id); 行中使用了$id,但您之前没有定义它。

    【讨论】:

      【解决方案2】:

      您似乎有一些逻辑错误。

      首先,你永远不会在任何地方设置$id,但这没关系,因为你真的不需要它。

      删除$specifications = Specification::find($id); 行,因为那没有任何作用。

      然后将您的最后一部分更改为这样的内容...

                  if( $listings->save() ) {
                          $specifications = new Specification;
                          $specifications->swimming_pool       = Input::get('swimming_pool');
                          $specifications->water_front      = Input::get('water_front');
                          $listing->specifications()->save($specifications);
                  }
      

      $listing->specifications()->save($specifications); 将自动为您保存带有正确listing_id 的新规范。

      将您的Listing 模型的specifications 关系修改为...

      public function specifications()
      {
         return $this->hasMany('Specification');
      }
      

      我在这里假设一个列表可以有多种规格。如果没有,您可以轻松地将其更改为 hasOne

      【讨论】:

      • 现在我在提交时收到此错误调用非对象上的成员函数 save()
      • 哦,原来如此,你们的关系设置错了。我将更新答案以包括对此的修复。两个关系不能属于彼此,除非它是 belongsToMany。在这里,一个规范属于一个列表,一个列表可以有多个规范。
      • 是的,一个Listing可以有很多listings_specifications。我更改了代码,但仍然出现相同的错误:调用非对象上的成员函数 save() 感谢您纠正我的数据库关系。
      • 抱歉,我打错了 $listings->save() 应该是 $listing->save() 但现在我又回到了错误:未定义变量:id
      • 我声明了 $id = 0 并修复了错误,我希望这是一个好的举措。但总的来说,我在提交时遇到了一个新错误:找不到类“listings_specifications”。据我所知,我在 Specification.php 模型中有 1 个 Specification() 方法
      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2014-10-14
      • 1970-01-01
      相关资源
      最近更新 更多