How to vary the required fields for POST and PUT in Swashbuckle?How to make HTTP POST web requestSimple post to Web ApiWhy not inherit from List<T>?Duplicate parameter output in SwaggerHow to query for metadata that is required for a put or a post?Custom Model Binder not invoking from Swagger UIHow to remove 'required' setting from form field using jQuery unobtrusive validationHow to exclude property from Swagger documentation on certain endpointsAspNetCore Swagger/Swashbuckle how to modify xml schema requestsIs it possible for Swagger to show a different model view for POST and PATCH, ie for write-once property?

Limits and Continuity in Multi variable calculus.

I think my ex-employer secretely kept me in their system as an employee

How to translate 脑袋短路 into English?

Gofer work in exchange for Letter of Recommendation

How can I train a replacement without letting my bosses and the replacement know?

Unity: transform.LookAt(target) not "looking at" target?

What happened after the end of the Truman Show?

What animal has fat with the highest energy density?

Interaction between Ethereal Absolution versus Edgar Markov with Captivating Vampire

Are there any OR challenges that are similar to kaggle's competitions?

Convert HTML color to OLE

Unbiased estimator of exponential of measure of a set?

"Silverware", "Tableware", and "Dishes"

Why should I pay for an SSL certificate?

Story about a demon trying to make a man insane

Cheap storage lockers in Tromsø, Norway

Why is su world executable?

E: Sub-process /usr/bin/dpkg returned an error code (1) - but how do I find the meaningful error messages in APT's output?

Why don't politicians push for fossil fuel reduction by pointing out their scarcity?

How do slats reduce stall speed?

Is it allowable to use an organization's name to publish a paper in a conference, even after I graduate from it?

Designing a prison for a telekinetic race

Default camera device to show screen instead of physical camera

TechSupport Issue ID#812



How to vary the required fields for POST and PUT in Swashbuckle?


How to make HTTP POST web requestSimple post to Web ApiWhy not inherit from List<T>?Duplicate parameter output in SwaggerHow to query for metadata that is required for a put or a post?Custom Model Binder not invoking from Swagger UIHow to remove 'required' setting from form field using jQuery unobtrusive validationHow to exclude property from Swagger documentation on certain endpointsAspNetCore Swagger/Swashbuckle how to modify xml schema requestsIs it possible for Swagger to show a different model view for POST and PATCH, ie for write-once property?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








-1















I'm responsible for maintaining the company API documentation. Our API is written ASP.NET. I recently switched to using Swashbuckle 5.6.0 which is working nicely.



The issue I've come accross is this:



We separate our data models into Post data and Get data, for example WebAccountGetData.cs and WebAccountPostData.cs. The Post data can be used when creating (POST) and updating (PUT).



Most, if not all, fields in the Post data classes are nullable, when an API method is called, the stored proc returns error messages describing what fields are missing/required. The API doesn't handle required fields.



Using nullable fields means Swashbuckle will not add a Required flag to the documentation. But we would like to show whether a field is required or not, based on the Http method used (Post/Put).



required example
The API Key is a required parameter as it is not nullable.



I'm aware that I can use the [Required] attribute from the System.ComponentModel.DataAnnotations namespace, but this will apply the Required flag to both the POST and PUT methods, which we do not want.



Idealy, I'd like to use a custom Attribute where I can specify whether a field is required in the Post or Put method.



public class ApiRequiredAttribute : Attribute

public bool RequiredInPost

get;
set;
= false;

public bool RequiredInPut

get;
set;
= false;



And then use it like so:



[ApiRequired(RequiredInPost = true)]
public int? ApprovalStatusId

get;
set;



Is there a way to use a custom IDocumentFilter, IOperationFilter or ISchemaFilter to apply changes (like toggling the required flag) to the schema properties of a model field? Or is it not possible in Swashbuckle to reference Attributes on a model?










share|improve this question


























  • Yes you can use IDocumentFilter for that, give it a try and update this post if you get stuck

    – Helder Sepulveda
    Mar 29 at 2:00

















-1















I'm responsible for maintaining the company API documentation. Our API is written ASP.NET. I recently switched to using Swashbuckle 5.6.0 which is working nicely.



The issue I've come accross is this:



We separate our data models into Post data and Get data, for example WebAccountGetData.cs and WebAccountPostData.cs. The Post data can be used when creating (POST) and updating (PUT).



Most, if not all, fields in the Post data classes are nullable, when an API method is called, the stored proc returns error messages describing what fields are missing/required. The API doesn't handle required fields.



Using nullable fields means Swashbuckle will not add a Required flag to the documentation. But we would like to show whether a field is required or not, based on the Http method used (Post/Put).



required example
The API Key is a required parameter as it is not nullable.



I'm aware that I can use the [Required] attribute from the System.ComponentModel.DataAnnotations namespace, but this will apply the Required flag to both the POST and PUT methods, which we do not want.



Idealy, I'd like to use a custom Attribute where I can specify whether a field is required in the Post or Put method.



public class ApiRequiredAttribute : Attribute

public bool RequiredInPost

get;
set;
= false;

public bool RequiredInPut

get;
set;
= false;



And then use it like so:



[ApiRequired(RequiredInPost = true)]
public int? ApprovalStatusId

get;
set;



Is there a way to use a custom IDocumentFilter, IOperationFilter or ISchemaFilter to apply changes (like toggling the required flag) to the schema properties of a model field? Or is it not possible in Swashbuckle to reference Attributes on a model?










share|improve this question


























  • Yes you can use IDocumentFilter for that, give it a try and update this post if you get stuck

    – Helder Sepulveda
    Mar 29 at 2:00













-1












-1








-1








I'm responsible for maintaining the company API documentation. Our API is written ASP.NET. I recently switched to using Swashbuckle 5.6.0 which is working nicely.



The issue I've come accross is this:



We separate our data models into Post data and Get data, for example WebAccountGetData.cs and WebAccountPostData.cs. The Post data can be used when creating (POST) and updating (PUT).



Most, if not all, fields in the Post data classes are nullable, when an API method is called, the stored proc returns error messages describing what fields are missing/required. The API doesn't handle required fields.



Using nullable fields means Swashbuckle will not add a Required flag to the documentation. But we would like to show whether a field is required or not, based on the Http method used (Post/Put).



required example
The API Key is a required parameter as it is not nullable.



I'm aware that I can use the [Required] attribute from the System.ComponentModel.DataAnnotations namespace, but this will apply the Required flag to both the POST and PUT methods, which we do not want.



Idealy, I'd like to use a custom Attribute where I can specify whether a field is required in the Post or Put method.



public class ApiRequiredAttribute : Attribute

public bool RequiredInPost

get;
set;
= false;

public bool RequiredInPut

get;
set;
= false;



And then use it like so:



[ApiRequired(RequiredInPost = true)]
public int? ApprovalStatusId

get;
set;



Is there a way to use a custom IDocumentFilter, IOperationFilter or ISchemaFilter to apply changes (like toggling the required flag) to the schema properties of a model field? Or is it not possible in Swashbuckle to reference Attributes on a model?










share|improve this question
















I'm responsible for maintaining the company API documentation. Our API is written ASP.NET. I recently switched to using Swashbuckle 5.6.0 which is working nicely.



The issue I've come accross is this:



We separate our data models into Post data and Get data, for example WebAccountGetData.cs and WebAccountPostData.cs. The Post data can be used when creating (POST) and updating (PUT).



Most, if not all, fields in the Post data classes are nullable, when an API method is called, the stored proc returns error messages describing what fields are missing/required. The API doesn't handle required fields.



Using nullable fields means Swashbuckle will not add a Required flag to the documentation. But we would like to show whether a field is required or not, based on the Http method used (Post/Put).



required example
The API Key is a required parameter as it is not nullable.



I'm aware that I can use the [Required] attribute from the System.ComponentModel.DataAnnotations namespace, but this will apply the Required flag to both the POST and PUT methods, which we do not want.



Idealy, I'd like to use a custom Attribute where I can specify whether a field is required in the Post or Put method.



public class ApiRequiredAttribute : Attribute

public bool RequiredInPost

get;
set;
= false;

public bool RequiredInPut

get;
set;
= false;



And then use it like so:



[ApiRequired(RequiredInPost = true)]
public int? ApprovalStatusId

get;
set;



Is there a way to use a custom IDocumentFilter, IOperationFilter or ISchemaFilter to apply changes (like toggling the required flag) to the schema properties of a model field? Or is it not possible in Swashbuckle to reference Attributes on a model?







c# asp.net-web-api swashbuckle redoc






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 27 at 19:07









Helen

38.3k5 gold badges92 silver badges149 bronze badges




38.3k5 gold badges92 silver badges149 bronze badges










asked Mar 27 at 14:39









Matt CleggMatt Clegg

933 silver badges13 bronze badges




933 silver badges13 bronze badges















  • Yes you can use IDocumentFilter for that, give it a try and update this post if you get stuck

    – Helder Sepulveda
    Mar 29 at 2:00

















  • Yes you can use IDocumentFilter for that, give it a try and update this post if you get stuck

    – Helder Sepulveda
    Mar 29 at 2:00
















Yes you can use IDocumentFilter for that, give it a try and update this post if you get stuck

– Helder Sepulveda
Mar 29 at 2:00





Yes you can use IDocumentFilter for that, give it a try and update this post if you get stuck

– Helder Sepulveda
Mar 29 at 2:00












1 Answer
1






active

oldest

votes


















0














I've managed to find a solution!



I created an IOperationFilter that creates new schemas for POST and PUT methods, based on properties with my custom ApiRequired attribute (see original question).



internal class ApplyRequiredAttributeFilter : IOperationFilter

public void Apply( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription )

HttpParameterBinding[] parameterBindings = apiDescription.ActionDescriptor.ActionBinding.ParameterBindings;

foreach ( HttpParameterBinding binding in parameterBindings )

PropertyInfo[] properties = binding.Descriptor.ParameterType.GetProperties();

// If the type is not an object and has no properties, ignore it.
if ( properties.Length == 0 )
continue;


Parameter modelParamater = operation.parameters.Last();
if ( modelParamater == null )
continue;


string schemaPath = modelParamater.schema?.@ref;
string schemaName = schemaPath?.Split( '/' ).Last();
if ( schemaName == null )
continue;


Schema oldSchema = schemaRegistry.Definitions[ schemaName ];

// Copy the existing schema.
Schema newSchema = new Schema

description = oldSchema.description,
properties = new Dictionary<string, Schema>( oldSchema.properties ),
required = oldSchema.required != null ? new List<string>( oldSchema.required ) : new List<string>(),
@type = oldSchema.type,
vendorExtensions = new Dictionary<string, object>( oldSchema.vendorExtensions )
;

// Find model properties with the custom attribute.
foreach ( PropertyInfo property in properties )
ApiRequiredAttribute attribute = property.GetCustomAttribute<ApiRequiredAttribute>();

if ( attribute != null )






I then add the filter to my EnableSwagger call.



GlobalConfiguration.Configuration
.EnableSwagger("docs/swagger/", c =>

// Other initialization code...
c.OperationFilter<ApplyRequiredAttributeFilter>();
);


The attributes are used like so:



[ApiRequired( RequiredInPost = true, RequiredInPut = true)]
public bool? Active

get;
set;


[ApiRequired( RequiredInPost = true )]
public string UserName

get;
set;



Finally, on the docs, the required flags look like this. The POST method parameters are on the left while the PUT method paramaters are on the right:



enter image description hereenter image description here






share|improve this answer


























    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55379920%2fhow-to-vary-the-required-fields-for-post-and-put-in-swashbuckle%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I've managed to find a solution!



    I created an IOperationFilter that creates new schemas for POST and PUT methods, based on properties with my custom ApiRequired attribute (see original question).



    internal class ApplyRequiredAttributeFilter : IOperationFilter

    public void Apply( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription )

    HttpParameterBinding[] parameterBindings = apiDescription.ActionDescriptor.ActionBinding.ParameterBindings;

    foreach ( HttpParameterBinding binding in parameterBindings )

    PropertyInfo[] properties = binding.Descriptor.ParameterType.GetProperties();

    // If the type is not an object and has no properties, ignore it.
    if ( properties.Length == 0 )
    continue;


    Parameter modelParamater = operation.parameters.Last();
    if ( modelParamater == null )
    continue;


    string schemaPath = modelParamater.schema?.@ref;
    string schemaName = schemaPath?.Split( '/' ).Last();
    if ( schemaName == null )
    continue;


    Schema oldSchema = schemaRegistry.Definitions[ schemaName ];

    // Copy the existing schema.
    Schema newSchema = new Schema

    description = oldSchema.description,
    properties = new Dictionary<string, Schema>( oldSchema.properties ),
    required = oldSchema.required != null ? new List<string>( oldSchema.required ) : new List<string>(),
    @type = oldSchema.type,
    vendorExtensions = new Dictionary<string, object>( oldSchema.vendorExtensions )
    ;

    // Find model properties with the custom attribute.
    foreach ( PropertyInfo property in properties )
    ApiRequiredAttribute attribute = property.GetCustomAttribute<ApiRequiredAttribute>();

    if ( attribute != null )






    I then add the filter to my EnableSwagger call.



    GlobalConfiguration.Configuration
    .EnableSwagger("docs/swagger/", c =>

    // Other initialization code...
    c.OperationFilter<ApplyRequiredAttributeFilter>();
    );


    The attributes are used like so:



    [ApiRequired( RequiredInPost = true, RequiredInPut = true)]
    public bool? Active

    get;
    set;


    [ApiRequired( RequiredInPost = true )]
    public string UserName

    get;
    set;



    Finally, on the docs, the required flags look like this. The POST method parameters are on the left while the PUT method paramaters are on the right:



    enter image description hereenter image description here






    share|improve this answer































      0














      I've managed to find a solution!



      I created an IOperationFilter that creates new schemas for POST and PUT methods, based on properties with my custom ApiRequired attribute (see original question).



      internal class ApplyRequiredAttributeFilter : IOperationFilter

      public void Apply( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription )

      HttpParameterBinding[] parameterBindings = apiDescription.ActionDescriptor.ActionBinding.ParameterBindings;

      foreach ( HttpParameterBinding binding in parameterBindings )

      PropertyInfo[] properties = binding.Descriptor.ParameterType.GetProperties();

      // If the type is not an object and has no properties, ignore it.
      if ( properties.Length == 0 )
      continue;


      Parameter modelParamater = operation.parameters.Last();
      if ( modelParamater == null )
      continue;


      string schemaPath = modelParamater.schema?.@ref;
      string schemaName = schemaPath?.Split( '/' ).Last();
      if ( schemaName == null )
      continue;


      Schema oldSchema = schemaRegistry.Definitions[ schemaName ];

      // Copy the existing schema.
      Schema newSchema = new Schema

      description = oldSchema.description,
      properties = new Dictionary<string, Schema>( oldSchema.properties ),
      required = oldSchema.required != null ? new List<string>( oldSchema.required ) : new List<string>(),
      @type = oldSchema.type,
      vendorExtensions = new Dictionary<string, object>( oldSchema.vendorExtensions )
      ;

      // Find model properties with the custom attribute.
      foreach ( PropertyInfo property in properties )
      ApiRequiredAttribute attribute = property.GetCustomAttribute<ApiRequiredAttribute>();

      if ( attribute != null )






      I then add the filter to my EnableSwagger call.



      GlobalConfiguration.Configuration
      .EnableSwagger("docs/swagger/", c =>

      // Other initialization code...
      c.OperationFilter<ApplyRequiredAttributeFilter>();
      );


      The attributes are used like so:



      [ApiRequired( RequiredInPost = true, RequiredInPut = true)]
      public bool? Active

      get;
      set;


      [ApiRequired( RequiredInPost = true )]
      public string UserName

      get;
      set;



      Finally, on the docs, the required flags look like this. The POST method parameters are on the left while the PUT method paramaters are on the right:



      enter image description hereenter image description here






      share|improve this answer





























        0












        0








        0







        I've managed to find a solution!



        I created an IOperationFilter that creates new schemas for POST and PUT methods, based on properties with my custom ApiRequired attribute (see original question).



        internal class ApplyRequiredAttributeFilter : IOperationFilter

        public void Apply( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription )

        HttpParameterBinding[] parameterBindings = apiDescription.ActionDescriptor.ActionBinding.ParameterBindings;

        foreach ( HttpParameterBinding binding in parameterBindings )

        PropertyInfo[] properties = binding.Descriptor.ParameterType.GetProperties();

        // If the type is not an object and has no properties, ignore it.
        if ( properties.Length == 0 )
        continue;


        Parameter modelParamater = operation.parameters.Last();
        if ( modelParamater == null )
        continue;


        string schemaPath = modelParamater.schema?.@ref;
        string schemaName = schemaPath?.Split( '/' ).Last();
        if ( schemaName == null )
        continue;


        Schema oldSchema = schemaRegistry.Definitions[ schemaName ];

        // Copy the existing schema.
        Schema newSchema = new Schema

        description = oldSchema.description,
        properties = new Dictionary<string, Schema>( oldSchema.properties ),
        required = oldSchema.required != null ? new List<string>( oldSchema.required ) : new List<string>(),
        @type = oldSchema.type,
        vendorExtensions = new Dictionary<string, object>( oldSchema.vendorExtensions )
        ;

        // Find model properties with the custom attribute.
        foreach ( PropertyInfo property in properties )
        ApiRequiredAttribute attribute = property.GetCustomAttribute<ApiRequiredAttribute>();

        if ( attribute != null )






        I then add the filter to my EnableSwagger call.



        GlobalConfiguration.Configuration
        .EnableSwagger("docs/swagger/", c =>

        // Other initialization code...
        c.OperationFilter<ApplyRequiredAttributeFilter>();
        );


        The attributes are used like so:



        [ApiRequired( RequiredInPost = true, RequiredInPut = true)]
        public bool? Active

        get;
        set;


        [ApiRequired( RequiredInPost = true )]
        public string UserName

        get;
        set;



        Finally, on the docs, the required flags look like this. The POST method parameters are on the left while the PUT method paramaters are on the right:



        enter image description hereenter image description here






        share|improve this answer















        I've managed to find a solution!



        I created an IOperationFilter that creates new schemas for POST and PUT methods, based on properties with my custom ApiRequired attribute (see original question).



        internal class ApplyRequiredAttributeFilter : IOperationFilter

        public void Apply( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription )

        HttpParameterBinding[] parameterBindings = apiDescription.ActionDescriptor.ActionBinding.ParameterBindings;

        foreach ( HttpParameterBinding binding in parameterBindings )

        PropertyInfo[] properties = binding.Descriptor.ParameterType.GetProperties();

        // If the type is not an object and has no properties, ignore it.
        if ( properties.Length == 0 )
        continue;


        Parameter modelParamater = operation.parameters.Last();
        if ( modelParamater == null )
        continue;


        string schemaPath = modelParamater.schema?.@ref;
        string schemaName = schemaPath?.Split( '/' ).Last();
        if ( schemaName == null )
        continue;


        Schema oldSchema = schemaRegistry.Definitions[ schemaName ];

        // Copy the existing schema.
        Schema newSchema = new Schema

        description = oldSchema.description,
        properties = new Dictionary<string, Schema>( oldSchema.properties ),
        required = oldSchema.required != null ? new List<string>( oldSchema.required ) : new List<string>(),
        @type = oldSchema.type,
        vendorExtensions = new Dictionary<string, object>( oldSchema.vendorExtensions )
        ;

        // Find model properties with the custom attribute.
        foreach ( PropertyInfo property in properties )
        ApiRequiredAttribute attribute = property.GetCustomAttribute<ApiRequiredAttribute>();

        if ( attribute != null )






        I then add the filter to my EnableSwagger call.



        GlobalConfiguration.Configuration
        .EnableSwagger("docs/swagger/", c =>

        // Other initialization code...
        c.OperationFilter<ApplyRequiredAttributeFilter>();
        );


        The attributes are used like so:



        [ApiRequired( RequiredInPost = true, RequiredInPut = true)]
        public bool? Active

        get;
        set;


        [ApiRequired( RequiredInPost = true )]
        public string UserName

        get;
        set;



        Finally, on the docs, the required flags look like this. The POST method parameters are on the left while the PUT method paramaters are on the right:



        enter image description hereenter image description here







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Mar 29 at 13:45

























        answered Mar 29 at 9:01









        Matt CleggMatt Clegg

        933 silver badges13 bronze badges




        933 silver badges13 bronze badges





















            Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.







            Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.



















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55379920%2fhow-to-vary-the-required-fields-for-post-and-put-in-swashbuckle%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

            SQL error code 1064 with creating Laravel foreign keysForeign key constraints: When to use ON UPDATE and ON DELETEDropping column with foreign key Laravel error: General error: 1025 Error on renameLaravel SQL Can't create tableLaravel Migration foreign key errorLaravel php artisan migrate:refresh giving a syntax errorSQLSTATE[42S01]: Base table or view already exists or Base table or view already exists: 1050 Tableerror in migrating laravel file to xampp serverSyntax error or access violation: 1064:syntax to use near 'unsigned not null, modelName varchar(191) not null, title varchar(191) not nLaravel cannot create new table field in mysqlLaravel 5.7:Last migration creates table but is not registered in the migration table

            은진 송씨 목차 역사 본관 분파 인물 조선 왕실과의 인척 관계 집성촌 항렬자 인구 같이 보기 각주 둘러보기 메뉴은진 송씨세종실록 149권, 지리지 충청도 공주목 은진현