Я могу использовать тот же драйвер, чтобы регистрировать два типа людей?

Хороший у меня есть формуляр в php у меня есть select, в котором я выбираю, если тип клиента, который нужно регистрировать, - натурален или юридический, выбрав, который хотел двух, он является соответствующим формуляром. Проблема состоит в том, что чтобы регистрировать каждый тип клиент, я использую два драйвера, что я не уверен, что это правильное.

База данных. Base de datos

Контролирующий Натуральный Клиент

public function store(ClientesFormRequest $request)
{
    if ($request) {
      try {
        DB::beginTransaction();
          $persona_natural = new Persona_natural;
          $persona_natural->telefono = $request->get('telefono');
          $persona_natural->cedula = $request->get('cedula');
          $persona_natural->direccion = $request->get('direccion');
          $persona_natural->nombre = $request->get('nombre');
          $persona_natural->save();

          $cliente = new Cliente;
          $mytime = Carbon::now('America/Bogota');
          $cliente->fecha_inscripcion = $mytime->toDateTimeString();
          $cliente->persona_natural_idpersona_natural = $persona_natural->idpersona_natural;
          $cliente->estado = 'Activo';
          $cliente->save();
        DB::commit();
      } catch (Exception $e) {
        db::rollback();
      }

      return redirect::to('cliente/natural');
    }
}

Контролирующий Юридический Клиент

public function store(JuridicosFormRequest $request)
    {
      if ($request) {
        try {
          DB::beginTransaction();
            $juridico = new Persona_juridico;
            $juridico->rason_social = $request->get('rason_social');
            $juridico->ruc = $request->get('ruc');
            $juridico->tipo_entidad = $request->get('tipo_entidad');
            $juridico->correo_electronico = $request->get('correo_electronico');
            $juridico->persona_natural_idpersona_natural = $request->get('persona_natural_idpersona_natural');
            $juridico->save();

            $cliente = new Cliente;
            $mytime = Carbon::now('America/Bogota');
            $cliente->fecha_inscripcion = $mytime->toDateTimeString();
            $cliente->juridico_idjuridico = $juridico->idjuridico;
            $cliente->estado = 'Activo';
            $cliente->save();


          DB::commit();
        } catch (Exception $e) {
          db::rollback();
        }

        return redirect::to('cliente/natural');
      }
    }

Requests. Натуральный клиент

public function rules()
    {
        return [
            'telefono'=>'max:20',
            'cedula'=>'required|max:10',
            'direccion'=>'required|max:200',
            'nombre'=>'required|max:50'
        ];
    }

Юридический клиент

public function rules()
    {
        return [
            'rason_social',
            'ruc',
            'tipo_entidad',
            'correo_electronico',
            'persona_natural_idpersona_natural'
        ];
    }

В мою манеру видеть я думаю, что правильное состояло бы в том, чтобы размещать if, который позволял бы мне санкционировать тип клиента посредством foreingKey, который я зарегистрирую в таблице клиент, а именно, если того, что получает мой драйвер, один jurídico_idjuridico, тогда ввод информации информация юридический в таблице, и если то, что он получает, он persona_natural_idpersona_natural тогда вставление было бы должно осуществляться в таблице persona_natural, но у меня нет идеи как делать это. он был бы должен санкционировать это с php??

2
задан 02.05.2017, 18:07
2 ответа

Я осмеливаюсь сказать, что этот вопрос получает ответы, которые основываются по мнениям, aún asà - я буду отвечать ее, чтобы вести немного и улучшать prÃ: cticas человека, который спрашивает:

  1. , Если у тебя есть по крайней мере два типа клиентов, я понимаю, что у тебя есть trait ClienteController, который делает общие задания между обоими типами клиентов, и этого оба клиента получают в наследство, ademÃ: s считения интерфейса осуществленным, чтобы уважать их métodos, у которого должны быть оба клиента.

  2. не должен быть ответственность драйвера быть должным бороться с базой данных и моделями, Ваш funci¦n состоит в том, чтобы уполномочивать просто этот funci¦n на услугу или на хранилище.

  3. Использовать new Algo идет против хороших prÃ: cticas Laravel и "современного" programaci¦n. Это производит ненужные зависимости и делает mÃ: s тяжелый для того, чтобы поддерживать и для того, чтобы тестировать c¦digo, для этого существует inyecci¦n зависимостей, как ты это делаешь с Request.


Я utilizar¦ - в единственный Request, чтобы санкционировать оба формуляра, и utilizar¦ - в один método store(), и начиная с ahà - llamar¦ - в в соответствующее хранилище для того, чтобы он хранил данные.

3
ответ дан 24.11.2019, 12:14
  • 1
    я больше вопросов появляются.... entonses, чтобы понимать, что они - traits, inyección de dependencias, и как они функционируют, я должен исследовать руководители php?? – jeancarlos733 08.12.2016, 05:01
  • 2
    В teorí во все это ты должен знать это перед тем, как использовать Laravel или любой другой framework. – Shaz 08.12.2016, 05:02
  • 3
    я понимаю спасибо – jeancarlos733 08.12.2016, 05:02

Лучший способ состоит в том, чтобы унифицировать в controller. Ты это перемещаешь parÃ: метр, который показывал бы тип клиента. Потом захотев ввести в таблице или другой, использовать тип клиента, что принятый hab¦-эксперт. Пример:

$tipo = $request->get('rason_social');
if($tipo == 'natural'){
    // Insertar en tabla persona_natural.
}else {
     // Insertar en tabla juridico
}

Предыдущий c¦digo одинокий идея для того, чтобы поняли.

Относительно validaci¦n следует тебе делать всегда, чтобы не вводить любую стоимость в твоей таблице. И deber¦-схвати это контролирования. Я это делаю в обеих сторонах (клиент (Веб браузер) и сервер), но уже завись тебя. Но если рекомендуемый и необходимо, который ты санкционировал, по крайней мере, в стороне сервера. В твоем случае в php.

1
ответ дан 24.11.2019, 12:14
  • 1
    друг уже agrege request, я имею два по отношению к post requests, если я привожу в порядок два в одном, не идет функционировать, итак, из-за которого признаки, что один нуждается в другом не и попросит у меня вводить в компьютер данные, которых нет – jeancarlos733 08.12.2016, 04:49
  • 2
    @jeancarlos733, если tenes два request, это пошли два. Я не использую laravel, но deberí когда, - способ enví в два pará метры или два request – josego 08.12.2016, 04:58
  • 3
    Не могут быть посланными два Request в Laravel в тот же mé совсем, он как будто ты просил два pá ginas Веб отличные. – Shaz 08.12.2016, 05:01
  • 4
    @Shaz, но если возможно использовать создавать вручную validadores. Encontré пример. stackoverflow.com/questions/32311109/… – josego 08.12.2016, 05:10
  • 5
    Это не má s, что делать утверждения вручную в драйвере, что не советовало кроме в случаях, в которых он был бы строго необходимым, в некой форме estarí эксперт упуская какие-то features Request, в самом деле, если ты читаешь комментарий OP в этом ответе, notará s, что также это не убеждает. – Shaz 08.12.2016, 05:20