laravel,如何使用Controller Store Action来级联保存对象

时间:2019-05-27 15:04:59

标签: php laravel-5 model-view-controller eloquent

我正在开发一个需要多重身份验证的应用程序,我在控制台上使用了creative-tim预设(假设creative-tim使用“用户”名称在控制台中存储用户)一个与User表具有一对一关系的Admin表,并创建了适当的中间件以限制对我的“仅管理员”视图的访问,并使用修补程序来创建Admin并将其链接到测试所有内容。 现在的问题是我想通过注册表单自动创建与用户的管理员关系,唯一的问题是,我正在使用的creative-tim模板没有遵循laravel文档,因此我无法理解而且我不知道如何将“管理员”模型链接到创建的“用户”。

这是数据库/模型的一部分: 用户(id,名称,电子邮件,email_verified_at,密码,rememberToken,时间戳) 管理员(id,user_id,角色,时间戳)

他们使用的方式是(显然是存储),但是他们使用了UserRequest和User Object,我尝试这样做:

        $Admin = new Admin();
        $Admin->role="Admin";
        $Admin->user_id = $model->id;
        $Admin->save();

这是我发现的原始功能

    public function store(UserRequest $request, User $model)
    {
        $model->create($request->merge(['password' =>Hash::make($request->get('password'))])->all());
  return redirect()->route('user.index')->withStatus(__('User successfully created.'));
    }

1 个答案:

答案 0 :(得分:0)

我实际上找到了解决该问题的方法(这不是我的首选),所以我正常创建了一个用户并获得了ID,并使用它来创建Admin,并在验证后可以完美地工作

import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

void main() => runApp(PostHome());

class PostHome extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("My Test"),
        ),
        body: PostScreen(),
      ),
    );
  }
}

class PostScreen extends StatefulWidget {
  @override
  _PostScreenState createState() => _PostScreenState();
}

class _PostScreenState extends State<PostScreen> {
  List<Post> _postList = new List<Post>();

  Future<List<Post>> fetchPost() async {
    final response =
    await http.get('http://alkadhum-col.edu.iq/wp-json/wp/v2/posts/');

    if (response.statusCode == 200) {
      // If the call to the server was successful, parse the JSON
      List<dynamic> values = new List<dynamic>();
      values = json.decode(response.body);
      if (values.length > 0) {
        for (int i = 0; i < values.length; i++) {
          if (values[i] != null) {
            Map<String, dynamic> map = values[i];
            _postList.add(Post.fromJson(map));
            print('${map['link']}');
          }
        }
      }
      return _postList;
    } else {
      // If that call was not successful, throw an error.
      throw Exception('Failed to load post');
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<Post>>(
      future: fetchPost(),
      builder: (_, AsyncSnapshot<List<Post>> snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        }

        return ListView.builder(
          itemCount: snapshot.data.length,
          itemBuilder: (_, index) {
            final post = snapshot.data[index];
            return ListTile(
              title: Text(post.title),
            );
          },
        );
      },
    );
  }

  @override
  void initState() {
    super.initState();
    fetchPost();
  }
}

class Post {
  final int id;
  String title;
  String link;
  String sourceurl;

  Post({this.id, this.title, this.link, this.sourceurl});

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(
      id: json['id'],
      title: json['title']['rendered'].toString(),
      link: json['link'].toString(),
    );
  }
}