【问题标题】:laravel insert a new row that has a key from another table and a null columnslaravel 插入一个新行,该行具有另一个表中的键和空列
【发布时间】:2014-06-18 09:31:35
【问题描述】:

这是我的餐桌:

餐厅餐桌有一个adminID 字段。这是管理表:

我有一个包含餐厅和管理员值的表单,

这是管理员模型:

class Admin  extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    public function restaurant(){
        return $this->belongsTo('Restaurant', 'ID');
    }

这是餐厅模型:

class Restaurant extends Eloquent implements UserInterface, RemindableInterface {

    use UserTrait, RemindableTrait;

    public function admin(){
        return $this->hasOne('Admin', 'adminID');
    }

这是用于存储新餐厅的 RestaurantsController

$input = Input::all();
        $validation = Validator::make($input, Admin::$rules);
        if($validation->passes()){
            $validation = Validator::make($input, Restaurant::$rules);
            if ($validation->passes())
            {
                $admin = Admin::create(Input::only('username', 'password', 'mobileNumber', 'firstName', 'lastName'));

如你所见,我有 $admin 变量,

我的问题

我需要插入新餐厅的 statmnet 是什么

  1. 请注意,我可以从 $admin->id 获取 adminID
  2. 请注意,该餐厅有一个空列,例如 logo 和 addressManualID

【问题讨论】:

  • 我也遇到了同样的问题……你省了我的努力。
  • 在编辑餐厅时,您如何显示 admin 的值,因为我们只需在 {{ Form::model ......}} 标签中传递一个模型。您是否在控制器中为 admin 传递值?
  • @neeraj 在将餐厅模型发送到视图时不需要传递admins,因为他们的管理员已经(以隐藏方式)被发送。例如,你会在你的观点中这样说$restaurant->admins(),这就足够了。记住要正确建立你们的关系
  • 非常感谢!!它通过添加像 {{ Form::text('email',$event->admin->->->email) }} 对我有用,因为在我的情况下,事件替换了餐馆 :)

标签: php mysql laravel laravel-4


【解决方案1】:

首先,您不需要实现UserInterfaceRemindableInterface,也不要使用use UserTrait, RemindableTrait 来创建所有模型,如果您有User,则仅使用User 模型用户身份验证模型(登录/注销)。如果Admin 模型被用作User 模型的替代品,那么您需要实现这些接口并且还需要使用这些特征。您还需要显式声明protected $table 属性以分配用于Admin 模型的表名(如果您不使用User 模型),还需要将app/config/auth.php 文件中的一些设置更改为下面给出:

'model' => 'Admin',

'table' => 'admins', // Could be anything else, same as protected $table property

然后在创建Admin时尝试如下保存相关模型:

//...
if ($validation->passes()) {
    $admin = Admin::create( Input::only('username', ...) );
    $restaurent = new Restaurant(Input::only(...));
    $admin->restaurant()->save($restaurent);
}

【讨论】:

  • 感谢您的回答,但我仍然需要一些东西。 restaurant 表有name 列,但输入有restaurantName 字段,如何告诉laravel 在name 列中插入restaurantName 字段
  • 手动制作数组,new Restaurant(array('name' => Input::get('restaurantName')))
  • 感谢您提供详细的解答!!
  • @WereWolf-TheAlpha 看来你也帮助了我的队友 :) user2208349 是我的队友,我们正在做同一个项目
  • 哦!真的很高兴知道@AnastasieLaurent :-)
【解决方案2】:

你会想要使用associate() 方法。

$restaurant = Restaurant::find(10);
$restaurant->admin()->associate($admin);
$restaurant->save();

参考:http://laravel.com/docs/eloquent#inserting-related-models

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2013-09-05
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多